summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source3/param/loadparm.c12
-rw-r--r--source3/smbd/service.c6
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;