diff options
Diffstat (limited to 'source3')
-rw-r--r-- | source3/param/loadparm.c | 12 | ||||
-rw-r--r-- | source3/smbd/service.c | 6 |
2 files changed, 10 insertions, 8 deletions
diff --git a/source3/param/loadparm.c b/source3/param/loadparm.c index 0593d2d190..eafed8172a 100644 --- a/source3/param/loadparm.c +++ b/source3/param/loadparm.c @@ -1803,10 +1803,10 @@ int lp_add_service(char *pszService, int iDefaultService) /*************************************************************************** add the IPC service ***************************************************************************/ -static BOOL lp_add_ipc(void) +static BOOL lp_add_ipc(char *ipc_name, BOOL guest_ok) { pstring comment; - int i = add_a_service(&sDefault, "IPC$"); + int i = add_a_service(&sDefault, ipc_name); if (i < 0) return (False); @@ -1823,7 +1823,7 @@ static BOOL lp_add_ipc(void) iSERVICE(i).bAvailable = True; iSERVICE(i).bRead_only = True; iSERVICE(i).bGuest_only = False; - iSERVICE(i).bGuest_ok = True; + iSERVICE(i).bGuest_ok = guest_ok; iSERVICE(i).bPrint_ok = False; iSERVICE(i).bBrowseable = sDefault.bBrowseable; @@ -3244,8 +3244,10 @@ BOOL lp_load(char *pszFname, BOOL global_only, BOOL save_defaults, lp_add_auto_services(lp_auto_services()); - if (add_ipc) - lp_add_ipc(); + if (add_ipc) { + lp_add_ipc("IPC$", True); + lp_add_ipc("ADMIN$", False); + } set_server_role(); set_default_server_announce_type(); diff --git a/source3/smbd/service.c b/source3/smbd/service.c index 02405e8dda..2c03d4e514 100644 --- a/source3/smbd/service.c +++ b/source3/smbd/service.c @@ -234,7 +234,7 @@ connection_struct *make_connection(char *service,char *user,char *password, int snum = find_service(service); if (snum < 0) { - if (strequal(service,"IPC$")) { + if (strequal(service,"IPC$") || strequal(service,"ADMIN$")) { DEBUG(3,("refusing IPC connection\n")); *ecode = ERRnoipc; return NULL; @@ -284,7 +284,7 @@ connection_struct *make_connection(char *service,char *user,char *password, int } /* you can only connect to the IPC$ service as an ipc device */ - if (strequal(service,"IPC$")) + if (strequal(service,"IPC$") || strequal(service,"ADMIN$")) pstrcpy(dev,"IPC"); if (*dev == '?' || !*dev) { @@ -386,7 +386,7 @@ connection_struct *make_connection(char *service,char *user,char *password, int conn->service = snum; conn->used = True; conn->printer = (strncmp(dev,"LPT",3) == 0); - conn->ipc = (strncmp(dev,"IPC",3) == 0); + conn->ipc = ((strncmp(dev,"IPC",3) == 0) || strequal(dev,"ADMIN$")); conn->dirptr = NULL; conn->veto_list = NULL; conn->hide_list = NULL; |