NamedPipe DCE/RPC struct split
Andrew Bartlett
abartlet at pcug.org.au
Tue Jan 15 00:34:05 GMT 2002
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
More information about the samba-technical
mailing list