![qwx](/assets/img/avatar_default.png)
Plumber both posts a service to /srv and sets a $plumbsrv environment variable. Our libplumb no longer uses $plumbsrv and nothing else does. It's a silly hack; rc doesn't update /env immediately, and scripts, which for instance set up subrios, cannot rely on it to clean up the plumber at the end. Instead, add the option to specify a srvname, actually check for some common errors and print a usage string. Thanks to Ori for input and a preliminary patch.
96 lines
1.5 KiB
C
96 lines
1.5 KiB
C
typedef struct Exec Exec;
|
|
typedef struct Rule Rule;
|
|
typedef struct Ruleset Ruleset;
|
|
|
|
/*
|
|
* Object
|
|
*/
|
|
enum
|
|
{
|
|
OArg,
|
|
OAttr,
|
|
OData,
|
|
ODst,
|
|
OPlumb,
|
|
OSrc,
|
|
OType,
|
|
OWdir,
|
|
};
|
|
|
|
/*
|
|
* Verbs
|
|
*/
|
|
enum
|
|
{
|
|
VAdd, /* apply to OAttr only */
|
|
VClient,
|
|
VDelete, /* apply to OAttr only */
|
|
VIs,
|
|
VIsdir,
|
|
VIsfile,
|
|
VMatches,
|
|
VSet,
|
|
VStart,
|
|
VTo,
|
|
};
|
|
|
|
struct Rule
|
|
{
|
|
int obj;
|
|
int verb;
|
|
char *arg; /* unparsed string of all arguments */
|
|
char *qarg; /* quote-processed arg string */
|
|
Reprog *regex;
|
|
};
|
|
|
|
struct Ruleset
|
|
{
|
|
int npat;
|
|
int nact;
|
|
Rule **pat;
|
|
Rule **act;
|
|
char *port;
|
|
};
|
|
|
|
struct Exec
|
|
{
|
|
Plumbmsg *msg;
|
|
char *match[10];
|
|
int p0; /* begin and end of match */
|
|
int p1;
|
|
int clearclick; /* click was expanded; remove attribute */
|
|
int setdata; /* data should be set to $0 */
|
|
int holdforclient; /* exec'ing client; keep message until port is opened */
|
|
/* values of $variables */
|
|
char *file;
|
|
char *dir;
|
|
};
|
|
|
|
void parseerror(char*, ...);
|
|
void error(char*, ...);
|
|
void* emalloc(long);
|
|
void* erealloc(void*, long);
|
|
char* estrdup(char*);
|
|
Ruleset** readrules(char*, int);
|
|
void startfsys(void);
|
|
Exec* matchruleset(Plumbmsg*, Ruleset*);
|
|
void freeexec(Exec*);
|
|
char* startup(Ruleset*, Exec*);
|
|
char* printrules(void);
|
|
void addport(char*);
|
|
char* writerules(char*, int);
|
|
char* expand(Exec*, char*, char**);
|
|
void makeports(Ruleset*[]);
|
|
void freeruleset(Ruleset*);
|
|
void printinputstack(void);
|
|
int popinput(void);
|
|
|
|
Ruleset **rules;
|
|
char *user;
|
|
char *home;
|
|
jmp_buf parsejmp;
|
|
char *lasterror;
|
|
char **ports;
|
|
int nports;
|
|
char *srvname;
|