nttrans.c:
authorLuke Leighton <lkcl@samba.org>
Wed, 23 Sep 1998 21:49:09 +0000 (21:49 +0000)
committerLuke Leighton <lkcl@samba.org>
Wed, 23 Sep 1998 21:49:09 +0000 (21:49 +0000)
winreg was missing from the list of pipes.  advise using the array
already defined in... rpc_parse/parse_rpc.c's pipe_names[], but
writing code to strip "\PIPE\" from the front when making the
check.

one location to update when adding new pipes, not two.

srv_pipe_hnd.c:

moved the ZERO_STRUCT(p) macro to _before_ the DLIST_ADD(Pipes, p) macro.

dlinklist.h:

added { }s around the code inserted by DLIST_ADD and DLIST_REMOVE macros

source/include/dlinklist.h
source/rpc_server/srv_pipe_hnd.c
source/smbd/nttrans.c

index 8810eca5b9a7179b7d0ca1baefac84beddb133c8..851bf01d380a0999335997d1b65e034c132f1f60 100644 (file)
@@ -25,6 +25,7 @@
 
 /* hook into the front of the list */
 #define DLIST_ADD(list, p) \
+{ \
         if (!(list)) { \
                (list) = (p); \
                (p)->next = (p)->prev = NULL; \
                (p)->next = (list); \
                (p)->prev = NULL; \
                (list) = (p); \
-       }
+       }\
+}
 
 
 /* remove an element from a list */
 #define DLIST_REMOVE(list, p) \
+{ \
        if ((p) == (list)) { \
                (list) = (p)->next; \
                if (list) (list)->prev = NULL; \
        } else { \
                (p)->prev->next = (p)->next; \
                if ((p)->next) (p)->next->prev = (p)->prev; \
-       }
+       } \
+}
 
 /* promote an element to the top of the list */
 #define DLIST_PROMOTE(list, p) \
index 3b743188a3e939d603fb45d696d88352e7c534b5..cf7fc9334eca4738898e08ffb8a398ae3f316e0f 100644 (file)
@@ -72,6 +72,9 @@ pipes_struct *open_rpc_pipe_p(char *pipe_name,
        pipes_struct *p;
        static int next_pipe;
 
+       DEBUG(4,("Open pipe requested %s (pipes_open=%d)\n",
+                pipe_name, pipes_open));
+       
        /* not repeating pipe numbers makes it easier to track things in 
           log files and prevents client bugs where pipe numbers are reused
           over connection restarts */
@@ -88,9 +91,15 @@ pipes_struct *open_rpc_pipe_p(char *pipe_name,
 
        next_pipe = (i+1) % MAX_OPEN_PIPES;
 
+       for (p = Pipes; p; p = p->next)
+       {
+               DEBUG(5,("open pipes: name %s pnum=%x\n", p->name, p->pnum));  
+       }
+
        p = (pipes_struct *)malloc(sizeof(*p));
        if (!p) return NULL;
 
+       ZERO_STRUCTP(p);
        DLIST_ADD(Pipes, p);
 
        bitmap_set(bmap, i);
@@ -98,7 +107,6 @@ pipes_struct *open_rpc_pipe_p(char *pipe_name,
 
        pipes_open++;
 
-       ZERO_STRUCTP(p);
        p->pnum = i;
 
        p->open = True;
@@ -123,7 +131,13 @@ pipes_struct *open_rpc_pipe_p(char *pipe_name,
        
        chain_p = p;
        
-       return p;
+       /* OVERWRITE p as a temp variable, to display all open pipes */ 
+       for (p = Pipes; p; p = p->next)
+       {
+               DEBUG(5,("open pipes: name %s pnum=%x\n", p->name, p->pnum));  
+       }
+
+       return chain_p;
 }
 
 
@@ -304,8 +318,18 @@ pipes_struct *get_rpc_pipe(int pnum)
 {
        pipes_struct *p;
 
-       for (p=Pipes;p;p=p->next) {
-               if (p->pnum == pnum) {
+       DEBUG(4,("search for pipe pnum=%x\n", pnum));
+
+       for (p=Pipes;p;p=p->next)
+       {
+               DEBUG(5,("pipe name %s pnum=%x (pipes_open=%d)\n", 
+                         p->name, p->pnum, pipes_open));  
+       }
+
+       for (p=Pipes;p;p=p->next)
+       {
+               if (p->pnum == pnum)
+               {
                        chain_p = p;
                        return p;
                }
index 514b5a0813ab7844043ddb5f6dc370ce61e7758f..4d3572c6a8bbcc2e082f6fd548af6b678da03e2f 100644 (file)
@@ -44,6 +44,7 @@ static char *known_nt_pipes[] = {
   "\\ntsvcs",
   "\\lsass",
   "\\lsarpc",
+  "\\winreg",
   NULL
 };