From a4833eb88857a3027cc2d9ff602f8f2e076b9d6d Mon Sep 17 00:00:00 2001 From: ian Date: Wed, 7 Apr 1999 23:43:09 +0000 Subject: [PATCH] New builtin service `help' lists builtin services. --- client.c | 4 +++- daemon.h | 3 ++- debian/changelog | 2 ++ language.i4 | 22 ++++++++++++++++------ lexer.l.m4 | 7 ++++++- servexec.c | 8 ++++++++ spec.sgml.in | 4 ++++ 7 files changed, 41 insertions(+), 9 deletions(-) diff --git a/client.c b/client.c index 57b3f21..740aac5 100644 --- a/client.c +++ b/client.c @@ -436,7 +436,9 @@ static void usage(void) { " --override-file } to root\n" " --spoof-user } or same user\n" "fdmodifiers: read write overwrite trunc[ate]\n" - "(separate with commas) append sync excl[usive] creat[e] fd\n\n" + "(separate with commas) append sync excl[usive] creat[e] fd\n" + "userv -B 'X' ... is same as userv --override 'execute-builtin X' - 'X' ...\n" + " for help, type `userv -B help'; remember to quote multi-word X\n" "userv and uservd version " VERSION VEREXT "; copyright (C)1996-1999 Ian Jackson.\n" "there is NO WARRANTY; type `userv --copyright' for details.\n", stderr) < 0) diff --git a/daemon.h b/daemon.h index 7db8440..96ab37b 100644 --- a/daemon.h +++ b/daemon.h @@ -129,9 +129,10 @@ const char *nondebug_serviceuserdir(const char *ifnondebug); typedef void builtinserviceexec_fnt(const char *const *args); builtinserviceexec_fnt NONRETURNING bisexec_environment, bisexec_parameter; -builtinserviceexec_fnt NONRETURNING bisexec_version; +builtinserviceexec_fnt NONRETURNING bisexec_version, bisexec_help; builtinserviceexec_fnt NONRETURNING bisexec_toplevel, bisexec_override, bisexec_reset; builtinserviceexec_fnt NONRETURNING bisexec_execute; +extern const char *const builtinservicehelpstrings[]; void execservice(const int synchsocket[], int clientfd) NONRETURNING; void servicerequest(int sfd) NONRETURNING; diff --git a/debian/changelog b/debian/changelog index 6c1c2fe..8ee0202 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,5 +1,7 @@ userv (0.61.0) unreleased; urgency=low + * New builtin service `help' lists builtin services. + INSTALL improvements: * Document locations of required programs. * Sort-of document debugging version. diff --git a/language.i4 b/language.i4 index 8857c2f..295a5da 100644 --- a/language.i4 +++ b/language.i4 @@ -1,7 +1,7 @@ dnl userv - language.i4 dnl definition of the configuration language, used for tokens.h and lexer.l dnl -dnl Copyright (C)1996-1997 Ian Jackson +dnl Copyright (C)1996-1997,1999 Ian Jackson dnl dnl This is free software; you can redistribute it and/or modify it dnl under the terms of the GNU General Public License as published by @@ -146,22 +146,32 @@ isparmcondition(`glob') isparmcondition(`range') isparmcondition(`grep') + +define(`builtininlist',` +pushdef(`odiv',divnum)divert(5)dnl + `"$1$2"', +divert(odiv)popdef(`odiv')') + dnl builtin services -define(`isbuiltinservice',`wordtypelexexec(`$1',`tokt_builtinservice', - `lr_bispa= bispa_'makename(`$2')`; lr_bisexec= bisexec_'makename(`$1')`; ')') +define(`isbuiltinservice', + `wordtypelexexec(`$1',`tokt_builtinservice$3', + `lr_bispa= bispa_'makename(`$2')`; lr_bisexec= bisexec_'makename(`$1')`; $5') + builtininlist(`$1',`$4')') isbuiltinservice(`environment',`none') -isbuiltinservice(`parameter',`parameter') +isbuiltinservice(`parameter',`parameter',`',` ') isbuiltinservice(`version',`none') isbuiltinservice(`toplevel',`none') isbuiltinservice(`override',`none') dnl builtin services that are also directive names define(`isdirectivebuiltinservice', - `wordtypelexexec(`$1',`tokt_directive|tokt_builtinservice$3', - `lr_dir= df_'makename(`$1')`; lr_bispa= bispa_'makename(`$2')`; lr_bisexec= bisexec_'makename(`$1')`; ')') + `isbuiltinservice(`$1',`$2',`|tokt_directive$3',`$4', + `lr_dir= df_'makename(`$1')`; ')') isdirectivebuiltinservice(`reset',`none') isdirectivebuiltinservice(`execute',`none',`|tokt_execmode') +isbuiltinservice(`help',`none') + dnl parameters define(`isparameter',`wordtypelexexec(`$1',`tokt_parameter', `lr_parameter= pf_'makename(`$1')`; ')') diff --git a/lexer.l.m4 b/lexer.l.m4 index 20a5e9f..c55c2e2 100644 --- a/lexer.l.m4 +++ b/lexer.l.m4 @@ -1,7 +1,7 @@ dnl userv - lexer.l.m4 dnl lexer, passed through m4 with defs from langauge.i4 /* - * Copyright (C)1996-1997,9 Ian Jackson + * Copyright (C)1996-1997,1999 Ian Jackson * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by @@ -190,6 +190,11 @@ changequote({*,*}) *} changequote(`,') %% + +const char *const builtinservicehelpstrings[]= { +undivert(5)dnl + 0 +}; ` #include "parser.c" ' diff --git a/servexec.c b/servexec.c index c1614f0..168e076 100644 --- a/servexec.c +++ b/servexec.c @@ -58,6 +58,14 @@ void bisexec_parameter(const char *const *argv) { serv_checkstdoutexit(); } +void bisexec_help(const char *const *argv) { + const char *const *pp; + + fputs("recognised builtin services:\n",stdout); + for (pp= builtinservicehelpstrings; *pp; pp++) printf(" %s\n",*pp); + serv_checkstdoutexit(); +} + void bisexec_version(const char *const *argv) { const unsigned char *p; int i; diff --git a/spec.sgml.in b/spec.sgml.in index ee04f9c..608121a 100644 --- a/spec.sgml.in +++ b/spec.sgml.in @@ -950,6 +950,10 @@ files). Displays the top-level override configuration (the configuration data, evaluated by the server, which causes all the other configuration data to be parsed). + + +Displays a list of the understood builtin service names and arguments. In the future other builtin services may be defined which do more than -- 2.30.2