OSSP CVS Repository

ossp - Difference in ossp-pkg/lmtp2nntp/lmtp2nntp_config.c versions 1.8 and 1.9
Not logged in
[Honeypot]  [Browse]  [Home]  [Login]  [Reports
[Search]  [Ticket]  [Timeline
  [History

ossp-pkg/lmtp2nntp/lmtp2nntp_config.c 1.8 -> 1.9

--- lmtp2nntp_config.c   2002/01/16 14:22:14     1.8
+++ lmtp2nntp_config.c   2002/01/17 17:01:55     1.9
@@ -21,35 +21,41 @@
 **  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
 **  USA, or contact the OSSP project <ossp@ossp.org>.
 **
-**  lmtp2nntp.c: LMTP to NNTP configuration parsing
+**  FIXME lmtp2nntp_config.c: LMTP to NNTP configuration parsing
 */
 
 #include <stdlib.h>
 #include <stdio.h>
 #include <sys/stat.h>
-// #include <unistd.h>
-// #include <errno.h>
-// #include <string.h>
-// #include <fcntl.h>
-// #include <sys/utsname.h>
-// #include <sys/time.h>
-// #include <sys/types.h>
-// #include <sys/wait.h>
-// #include <sys/stat.h>
-// #include <signal.h>
-// #include <pwd.h>
+#if 0
+#include <unistd.h>
+#include <errno.h>
+#include <string.h>
+#include <fcntl.h>
+#include <sys/utsname.h>
+#include <sys/time.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <sys/stat.h>
+#include <signal.h>
+#include <pwd.h>
+#endif
 
 /* third party (included) */
-// #include "lmtp2nntp_argz.h"
-// #include "lmtp2nntp_shpat.h"
-// #include "lmtp2nntp_daemon.h"
+#if 0
+#include "lmtp2nntp_argz.h"
+#include "lmtp2nntp_shpat.h"
+#include "lmtp2nntp_daemon.h"
+#endif
 #include "lmtp2nntp_popt.h"
 #include "val.h"
 
 /* third party (linked in) */
 #include "str.h"
-// #include "l2.h"
-// #include "var.h"
+#if 0
+#include "l2.h"
+#include "var.h"
+#endif
 
 /* library version check (compile-time) */
 #define  L2_VERSION_HEX_REQ 0x001200
@@ -95,13 +101,14 @@
 #define NUL '\0'
 #endif
 
-void die(char *); //FIXME
+void die(char *); /* FIXME */
 void die(char *msg)
 {
         printf("ERROR: %s\n", msg);
             exit(-1);
 }
 
+#if 0
 static val_rc_t dumper(void *ctx, const char *name, int type, const char *desc, void *data)
 {
     switch (type) {
@@ -145,6 +152,12 @@
     return VAL_OK;
 }
 
+
+
+
+    FIXME pass(optionconfig_t *o, int pass);
+    /* pass=0 for preinitialization !? */
+
 void dotconftest(int argc, char **argv) /*FIXME*/
 {
     popt_context poptCon;   /* context for parsing command-line options */
@@ -210,10 +223,8 @@
         if ((rc = val_create(&v2)) != VAL_OK)
             die("val_create 2");
 
-#if 0
         if ((rc = val_reg(v, "bar", VAL_TYPE_VAL, "bar variable", (void *)&v2)) != VAL_OK)
             die("val_reg 2");
-#endif
         val_reg(v, "bar", VAL_TYPE_VAL, "bar variable", NULL);
         val_set(v, "bar", v2);
         if ((rc = val_get(v, "bar", &v3)) != VAL_OK)
@@ -266,15 +277,15 @@
         if ((rc = val_set(v, "bar.double", 3.14159265358979)) != VAL_OK)
             die("val_set  for bar.double using inline data");
 
-        // OK val_apply(v,  "", 9, dumper, "v" );
-        // OK val_apply(v2, "", 9, dumper, "v2");
-        // OK val_apply(v,  "", 0, dumper, "v" );
-        // OK val_apply(v,  "bar", 1, dumper, "v" );
-        // OK val_apply(v2,  "", 0, dumper, "v" );
-        // OK val_apply(v,  "", 1, dumper, "v" );
-        // OK val_apply(v,  "foo", 0, dumper, "v" );
-        // OK val_apply(v2,  "char", 2, dumper, "v" );
-        // OK val_apply(v,  "bar.char", 2, dumper, "v" );
+        OK val_apply(v,  "", 9, dumper, "v" );
+        OK val_apply(v2, "", 9, dumper, "v2");
+        OK val_apply(v,  "", 0, dumper, "v" );
+        OK val_apply(v,  "bar", 1, dumper, "v" );
+        OK val_apply(v2,  "", 0, dumper, "v" );
+        OK val_apply(v,  "", 1, dumper, "v" );
+        OK val_apply(v,  "foo", 0, dumper, "v" );
+        OK val_apply(v2,  "char", 2, dumper, "v" );
+        OK val_apply(v,  "bar.char", 2, dumper, "v" );
 
         if ((rc = val_destroy(v2)) != VAL_OK)
             die("val_destroy 2");
@@ -318,27 +329,6 @@
 human-readable format. Dazu informationen fuer help.
  */
 
-/* Braindump
-
-    fuer var
-
-ich brauche eine struktur, aus der man ersehen kann, welche variablen es gibt. 
-    {
-        struct "system.uname.sysname",  varstring, 
-        struct "system.uname.nodename", 
-        struct "system.uname.release", 
-        struct "system.uname.version", 
-        struct "system.uname.machine", 
-        
-        <<< ctx->progname = strdup(argv[0]);
-        <<< foo = ctx->progname;
-
-        >>> rc = varreg("main.progname", &ctx->progname);
-        >>> rc = varset("main.progname", strdup(argv[0])); //equivalent to ctx->progname = strdup(argv[0]);
-        >>> rc = varget("main.progname", &foo);            //equivalent to foo = ctx->progname
-    }
- */
-
     {
         const char *filename = "example.conf";
         struct stat sb;
@@ -356,7 +346,7 @@
         if (close(fd) == -1)
             die("close");
     }
-    //FIXME printf("DEBUG: *** 1 *** file as it was just read in ***\n%s***\n", cpBuf);
+    printf("DEBUG: *** 1 *** file as it was just read in ***\n%s***\n", cpBuf);
 
     {
         char *cpI;  /* pointer to next character to be read */
@@ -396,22 +386,22 @@
                     if (!eline) { /* process logical line unless it's empty */
                         *(cpO-1) = NUL;
                         if (lline == (pline-1))
-                            ;//printf("DEBUG: line[%3d] = ***%s***\n", lline, cpL);
+                            printf("DEBUG: line[%3d] = ***%s***\n", lline, cpL);
                         else
-                            ;//printf("DEBUG: [%3d-%3d] = ***%s***\n", lline, pline-1, cpL);
+                            printf("DEBUG: [%3d-%3d] = ***%s***\n", lline, pline-1, cpL);
                         {
                             char *cp = cpL;
                             char *command;
                             char *value;
 
                             if ((command = str_token(&cp, " \t", "\"'", "#", STR_STRIPQUOTES|STR_BACKSLASHESC)) == NULL)
-                                ;//printf("DEBUG: no command - comment only\n");
+                                printf("DEBUG: no command - comment only\n");
                             else {
                                 printf("DEBUG:   command = ***%s***\n", command);
                                 if ((value = str_token(&cp, " \t", "\"'", "#", STR_STRIPQUOTES|STR_BACKSLASHESC)) == NULL)
                                     printf("DEBUG: no value - section\n");
                                 else {
-                                    ;//while(isspace((int)*value)) value++;
+                                    while(isspace((int)*value)) value++;
                                     printf("DEBUG:     value = ***%s***\n", value);
                                 }
                             }
@@ -426,4 +416,145 @@
         }
     }
 }
+#endif
+
+typedef enum {
+    OPT_FLAG,
+    OPT_SINGLE,
+    OPT_MULTI
+} optiontype_t;
+
+typedef void (*optionloop_cb_t)(void);
+
+struct optionconfig_s;
+typedef struct optionconfig_s optionconfig_t;
+struct optionconfig_s {
+    optionconfig_t *next;           /* cleanup chain for destroy */
+                    /**/
+    char               *longname;       /* the long name (optional if shortname given) */
+    char                shortname;      /* the short name (optional if longname given) */
+    char               *descrip;        /* description for autohelp */
+    char               *argdescrip;     /* argument description for autohelp */
+    optiontype_t        type;           /* OPT_FLAG, OPT_SINGLE, OPT_MULTI */
+    optionloop_cb_t    *cb;             /* callback for first iteration - syntax check and include */
+    void               *cbctx;          /* context for pass1 */
+    void               *pass1default;   /* default for pass1 */
+    val_t              *val;            /* val we are registered under */
+                    /**/
+    int             number;         /* number of this option for popt */
+    union {                         /* option data as read from configuration */
+        int f;                      /* OPT_FLAG */
+        char *s;                    /* OPT_SINGLE */
+        char **m;                   /* OPT_MULTI */
+    } data;
+};
 
+static void stdsyntax(void)
+{
+    return;
+}
+
+static void includeit(void)
+{
+    return;
+}
+
+static void option_register(lmtp2nntp_option_t *o, char *longname, char shortname, optiontype_t type, optionloop_cb_t cb, char *cbctx, char *descrip, char *argdescrip)
+{
+    return;
+}
+
+lmtp2nntp_option_rc_t option_create(lmtp2nntp_option_t **op)
+{
+    if (op == NULL)
+        return OPTION_ERR_ARG;
+
+    if ((*op = (lmtp2nntp_option_t *)malloc(sizeof(lmtp2nntp_option_t))) == NULL)
+        return OPTION_ERR_MEM;
+    (*op)->childsmax = 0;
+    (*op)->daemonize = 0;
+    (*op)->kill = 0;
+    (*op)->pidfile = 0;
+    (*op)->acl.as = 0;
+    (*op)->acl.az = NULL;
+    (*op)->bind = NULL;
+    (*op)->client = NULL;
+    (*op)->destination.as = 0;
+    (*op)->destination.az = NULL;
+    (*op)->groupmode = NULL;
+    (*op)->headervalue.as = 0;
+    (*op)->headervalue.az = NULL;
+    (*op)->include.as = 0;
+    (*op)->include.az = NULL;
+    (*op)->size = 0;
+    (*op)->timeoutlmtpaccept = 0;
+    (*op)->timeoutlmtpread = 0;
+    (*op)->timeoutlmtpwrite = 0;
+    (*op)->timeoutnntpconnect = 0;
+    (*op)->timeoutnntpread = 0;
+    (*op)->timeoutnntpwrite = 0;
+    (*op)->mailfrom = NULL;
+    (*op)->nodename = NULL;
+    (*op)->operationmode = NULL;
+    (*op)->l2spec = NULL;
+    (*op)->uid = NULL;
+    (*op)->restrictheader.as = 0;
+    (*op)->restrictheader.az = NULL;
+    (*op)->newsgroup.as = 0;
+    (*op)->newsgroup.az = NULL;
+                    /**/
+    (*op)->vo = NULL;
+    if (val_create(&((*op)->vo)) != VAL_OK) {
+        free(*op);
+        return OPTION_ERR_VAL;
+    }
+    return OPTION_OK;
+}
+
+lmtp2nntp_option_rc_t option_parse(lmtp2nntp_option_t *o, int argc, char **argv)
+{
+    if (o == NULL)
+        return OPTION_ERR_ARG;
+
+    option_register(o, "childsmax",           'C', OPT_SINGLE, stdsyntax, "[0-9]{,5}",           "foo", "childsmax" );
+    option_register(o, "daemonize",           'D', OPT_FLAG,   NULL,      NULL,                  "foo", NULL );
+    option_register(o, "kill",                'K', OPT_FLAG,   NULL,      NULL,                  "foo", NULL );
+    option_register(o, "pidfile",             'P', OPT_SINGLE, stdsyntax, ".{,255}",             "foo", "pidfile" );
+    option_register(o, "veryverbose",         'V', OPT_FLAG,   NULL,      NULL,                  "foo", NULL );
+    option_register(o, "acl",                 'a', OPT_MULTI,  stdsyntax, "[0-9.](/[0-9]2)?",    "foo", "addr[/mask]" );
+    option_register(o, "bind",                'b', OPT_SINGLE, stdsyntax, ".*",                  "foo", "addr[:port]|-|path[:perms]" );
+    option_register(o, "client",              'c', OPT_SINGLE, stdsyntax, ".*",                  "foo", "addr[:port]" );
+    option_register(o, "destination",         'd', OPT_MULTI,  stdsyntax, ".*",                  "foo", "addr[:port]" );
+    option_register(o, "groupmode",           'g', OPT_SINGLE, stdsyntax, ".*",                  "foo", "groupmode" );
+    option_register(o, "headervalue",         'h', OPT_MULTI,  stdsyntax, ".*",                  "foo", "header: value" );
+    option_register(o, "include",             'i', OPT_MULTI,  includeit, ".*",                  "foo", "configfile" );
+    option_register(o, "size",                's', OPT_SINGLE, stdsyntax, ".*",                  "foo", "bytes" );
+    option_register(o, "timeoutlmtpaccept",   NUL, OPT_MULTI,  stdsyntax, ".*",                  "foo", "sec" );
+    option_register(o, "timeoutlmtpread",     NUL, OPT_MULTI,  stdsyntax, ".*",                  "foo", "sec" );
+    option_register(o, "timeoutlmtpwrite",    NUL, OPT_MULTI,  stdsyntax, ".*",                  "foo", "sec" );
+    option_register(o, "timeoutnntpconnect",  NUL, OPT_MULTI,  stdsyntax, ".*",                  "foo", "sec" );
+    option_register(o, "timeoutnntpread",     NUL, OPT_MULTI,  stdsyntax, ".*",                  "foo", "sec" );
+    option_register(o, "timeoutnntpwrite",    NUL, OPT_MULTI,  stdsyntax, ".*",                  "foo", "sec" );
+    option_register(o, "mailfrom",            'm', OPT_SINGLE, stdsyntax, ".*",                  "foo", "regex" );
+    option_register(o, "nodename",            'n', OPT_SINGLE, stdsyntax, ".*",                  "foo", "nodename" );
+    option_register(o, "operationmode",       'o', OPT_SINGLE, stdsyntax, ".*",                  "foo", "post|feed" );
+    option_register(o, "l2spec",              'l', OPT_SINGLE, stdsyntax, ".*",                  "foo", "spec" );
+    option_register(o, "uid",                 'u', OPT_SINGLE, stdsyntax, ".*",                  "foo", "number|name" );
+    option_register(o, "restrictheader",      'r', OPT_MULTI,  stdsyntax, ".*",                  "foo", "regex" );
+    option_register(o, "newsgroup",           NUL, OPT_MULTI,  stdsyntax, ".*",                  "foo", "newsgroup");
+
+    return OPTION_OK;
+}
+
+lmtp2nntp_option_rc_t option_destroy(lmtp2nntp_option_t *o)
+{
+    if (o == NULL)
+        return OPTION_ERR_ARG;
+
+    if (o->vo != NULL)
+        val_destroy(o->vo);
+
+    free(o);
+
+    return OPTION_OK;
+}

CVSTrac 2.0.1