NamedPipe DCE/RPC struct split
Luke Kenneth Casson Leighton
lkcl at samba-tng.org
Wed Jan 16 02:47:03 GMT 2002
okay, the ones that i _can_ deal with are attached.
the talloc context one is a "built-in" pipe design
issue that will have to be dealt with by jeremy / jf / gerry
etc.
which just really leaves the malloc comment and the
local-var one: the others are namedpipe-split related.
lukes
On Tue, Jan 15, 2002 at 07:30:02PM +1100, Andrew Bartlett wrote:
> Luke Kenneth Casson Leighton wrote:
> >
> > okay.
> >
> > i'm happy with this one.
>
> Well it looks ok, but I have some basic problems:
>
> * Firstly, it didn't compile. Now really, a patch supplied for commit
> to the tree should at least compile. (read_from_pipe got an extra arg).
>
> * Secondly, there are basic issues: Like the pipes_struct that
> contains:
>
> struct smb_np_struct *p; /* back-link to originating smb connection */
>
> But this never gets filled in.
>
> These functions are a good idea - but also illustrate another problem:
>
> +
> +uint16 pipe_internal_get_vuid(pipes_struct *p)
> +{
> + return p->p->vuid;
> +}
> +
> +struct connection_struct *pipe_internal_get_conn(pipes_struct *p)
> +{
> + return p->p->conn;
> +}
> +
>
> What the heck is p->p ? Single letter names just make it harder to
> follow. (Try
> np_backlink).
>
> * I have some design issues:
>
> What is with:
> pipes_struct *make_internal_rpc_pipe_p(char *pipe_name,
> connection_struct *conn, uint16 vuid)
>
> If that back-link (once filled in) already gives the conn and vuid?
> (There probably is a valid reason, but commenting on it make it easier.
>
> * Similarly, there are some other issues of taste (which you can't have
> been expected to know about):
>
> Why malloc a structure, then place a talloc context on that structure?
> Sure, you can take care of the free at the same time but if you talloc()
> it, and use 'talloc_init_named()' you can give the memory tacking system
> a better idea whats using the memeory.
>
> * And other things that you should have known about:
>
> If a malloc fails, try to complain to the logs. Most mallocs/tallocs in
> Samba are followed by 'DEBUG(0, ("malloc failed!\n"));' at least.
>
> (Even better is to return an appropriate NT_STATUS, like
> NT_STATUS_NO_MEMORY so the other end doesn't get something strange like
> 'ERRnofids').
>
> On the smb_np_struct there is a void *np_state, designed to be operated
> on only by its own particular functions, which know what kind of object
> it really is. These should be included as function pointers on the
> structure - effectively re-typing the void* and removing its
> complications.
>
> If this isn't to be done at this stage then type it properly, and void*
> it later (leave a comment if you want).
>
> * Nitpicks that should have been cleaned up (even if in original code):
>
> Don't use a variable for two purposes - ie once as a normal function
> variable and once again as a temp in a loop, just declare a new one and
> use it (srv_pipe_hnd.c:213)
>
> If you can improve on some of these issues the patch may well make it
> into the tree.
>
> Finally, please don't take these as anything more than what they are:
> remarks on a patch that I have been asked to commit. I have published
> them publicly because I feel that others may find them useful if they
> too want me to apply a patch to the tree.
>
> Andrew Bartlett
>
> --
> Andrew Bartlett abartlet at pcug.org.au
> Manager, Authentication Subsystems, Samba Team abartlet at samba.org
> Student Network Administrator, Hawker College abartlet at hawkerc.net
> http://samba.org http://build.samba.org http://hawkerc.net
-------------- next part --------------
Index: rpc_server/srv_pipe_hnd.c
===================================================================
RCS file: /cvsroot/samba/source/rpc_server/srv_pipe_hnd.c,v
retrieving revision 1.72
diff -u -u -r1.72 srv_pipe_hnd.c
--- rpc_server/srv_pipe_hnd.c 5 Nov 2001 07:42:55 -0000 1.72
+++ rpc_server/srv_pipe_hnd.c 16 Jan 2002 10:44:23 -0000
@@ -122,7 +122,7 @@
connection_struct *conn, uint16 vuid)
{
int i;
- pipes_struct *p;
+ pipes_struct *p, p_it;
static int next_pipe;
DEBUG(4,("Open pipe requested %s (pipes_open=%d)\n",
@@ -150,7 +150,10 @@
p = (pipes_struct *)malloc(sizeof(*p));
if (!p)
+ {
+ DEBUG(0,("ERROR! no memory for pipes_struct!\n"));
return NULL;
+ }
ZERO_STRUCTP(p);
@@ -238,8 +241,8 @@
chain_p = 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));
+ for (p_it = Pipes; p_it; p_it = p_it->next)
+ DEBUG(5,("open pipes: name %s pnum=%x\n", p_it->name, p_it->pnum));
return chain_p;
}
More information about the samba-technical
mailing list