r3209: - Create directory for ncalrpc with correct mode
authorJelmer Vernooij <jelmer@samba.org>
Mon, 25 Oct 2004 10:21:41 +0000 (10:21 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 18:04:41 +0000 (13:04 -0500)
- Support binding strings like :

ncacn_np:[sign]
ncacn_np:myhost[seal,sign,endpoint]

again
(This used to be commit b53f4cd1697345065c7d979ba63237bf828dc07f)

source4/librpc/rpc/dcerpc_sock.c
source4/librpc/rpc/dcerpc_util.c
source4/rpc_server/dcerpc_sock.c

index 9ad5c06ad2bcf4b1d813184b2e226173f25a41aa..b22ada1d7f2e05f8f7998fdab88405cfa2116d62 100644 (file)
@@ -403,6 +403,7 @@ NTSTATUS dcerpc_pipe_open_unix_stream(struct dcerpc_pipe **p,
        strncpy(sa.sun_path, path, sizeof(sa.sun_path));
 
        if (connect(fd, &sa, sizeof(sa)) < 0) {
+               DEBUG(0, ("Unable to connect to unix socket %s: %s\n", path, strerror(errno)));
                return NT_STATUS_BAD_NETWORK_NAME;
        }
 
@@ -487,6 +488,7 @@ NTSTATUS dcerpc_pipe_open_pipe(struct dcerpc_pipe **p,
        strncpy(sa.sun_path, full_path, sizeof(sa.sun_path));
 
        if (connect(fd, &sa, sizeof(sa)) < 0) {
+               DEBUG(0, ("Unable to connect to unix socket %s (%s): %s\n", full_path, identifier, strerror(errno)));
                return NT_STATUS_BAD_NETWORK_NAME;
        }
 
index 9ec1af77add58b207d9493424fc64f88e17500c0..d0ecf3a7a84a060b042ce0d2476b0de3123f0423 100644 (file)
@@ -220,6 +220,7 @@ const char *dcerpc_binding_string(TALLOC_CTX *mem_ctx, const struct dcerpc_bindi
                s = talloc_asprintf_append(s, ",%s", b->options[i]);
                if (!s) return NULL;
        }
+
        for (i=0;i<ARRAY_SIZE(ncacn_options);i++) {
                if (b->flags & ncacn_options[i].flag) {
                        s = talloc_asprintf_append(s, ",%s", ncacn_options[i].name);
@@ -325,14 +326,6 @@ NTSTATUS dcerpc_parse_binding(TALLOC_CTX *mem_ctx, const char *s, struct dcerpc_
        b->options[i] = options;
        b->options[i+1] = NULL;
 
-       /* Endpoint is first option */
-       b->endpoint = b->options[0];
-       if (strlen(b->endpoint) == 0) b->endpoint = NULL;
-
-       for (i=0;b->options[i];i++) {
-               b->options[i] = b->options[i+1];
-       }
-
        /* some options are pre-parsed for convenience */
        for (i=0;b->options[i];i++) {
                for (j=0;j<ARRAY_SIZE(ncacn_options);j++) {
@@ -348,6 +341,16 @@ NTSTATUS dcerpc_parse_binding(TALLOC_CTX *mem_ctx, const char *s, struct dcerpc_
                }
        }
 
+       if (b->options[0]) {
+               /* Endpoint is first option */
+               b->endpoint = b->options[0];
+               if (strlen(b->endpoint) == 0) b->endpoint = NULL;
+
+               for (i=0;b->options[i];i++) {
+                       b->options[i] = b->options[i+1];
+               }
+       }
+
        if (b->options[0] == NULL)
                b->options = NULL;
        
index 2d11431d0b793e92194e58acc0fd3b16e6c2ccba..bffa5cffd8889f2bd5fadfd3ca0ab2d1894c48e1 100644 (file)
@@ -90,8 +90,10 @@ static void add_socket_rpc_ncalrpc(struct server_service *service,
        char *full_path;
 
        if (!e->ep_description.endpoint) {
-               /* No identifier specified: generate one */
-               e->ep_description.endpoint = generate_random_str(dce_ctx, 10);
+               /* No identifier specified: use DEFAULT. 
+                * DO NOT hardcode this value anywhere else. Rather, specify 
+                * no endpoint and let the epmapper worry about it. */
+               e->ep_description.endpoint = talloc_strdup(dce_ctx, "DEFAULT");
        }
 
        full_path = talloc_asprintf(dce_ctx, "%s/%s", lp_ncalrpc_dir(), e->ep_description.endpoint);