chiark / gitweb /
New builtin service `help' lists builtin services.
authorian <ian>
Wed, 7 Apr 1999 23:43:09 +0000 (23:43 +0000)
committerian <ian>
Wed, 7 Apr 1999 23:43:09 +0000 (23:43 +0000)
client.c
daemon.h
debian/changelog
language.i4
lexer.l.m4
servexec.c
spec.sgml.in

index 57b3f219c42e3d9153ed2a90d8ac461b84d7dd36..740aac54e44ecd357b2e21a61b58f82ab22b71b4 100644 (file)
--- a/client.c
+++ b/client.c
@@ -436,7 +436,9 @@ static void usage(void) {
     "         --override-file <filename>      }  to root\n"
     "         --spoof-user <username>         }  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)
index 7db8440ab2f1c8e151898838fab89fe9b566ea68..96ab37b9054657d6bf4e7582835ced28363ac0d1 100644 (file)
--- 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;
index 6c1c2fe782c24d7ef028fbdd7abb2297b9c79d93..8ee02026fd36cc7d5b0c9377ff7cb074c9fe69b5 100644 (file)
@@ -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.
index 8857c2f22cee20f0c6c26fccd539bfa0bf6840dd..295a5da184fa76d1377e62943fc6e6586ba44d8e 100644 (file)
@@ -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',`',` <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')`; ')')
index 20a5e9f44698a9cc7a91fa5710dc5172f2eefce9..c55c2e26495dec3ae05f6a1b1aec1f0223b1824b 100644 (file)
@@ -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"
 '
index c1614f0d9952aeacf71f763b6094658cbfb5b579..168e07657ad427dd16021e5a58662d0af10cd9ef 100644 (file)
@@ -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;
index ee04f9cb2f3caa6fa843ce0e1adbb45e506aa2cb..608121acafc7db04adc0bf80e5bb079039d826c2 100644 (file)
@@ -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).
+
+<tag/<tt/help//
+<item>
+Displays a list of the understood builtin service names and arguments.
 </taglist>
 
 In the future other builtin services may be defined which do more than