added two new params: "trusted domains" and "trusting domains".
authorLuke Leighton <lkcl@samba.org>
Tue, 16 Nov 1999 17:27:41 +0000 (17:27 +0000)
committerLuke Leighton <lkcl@samba.org>
Tue, 16 Nov 1999 17:27:41 +0000 (17:27 +0000)
these _may_ not actually ever get used, as trust relationships
really need to be established with shared secrets, and you need
to get the SID of the trusted and trusting domains, so this
may have to go in a private/xxx.mac file.

source/include/proto.h
source/lib/sids.c
source/param/loadparm.c
source/rpc_parse/parse_net.c
source/rpc_server/srv_netlog.c

index 9c801297dc6761439e6bcb21b45bae6375d935ef..1d6f6d269d66e71fe7707ff5afbc11c99438b222 100644 (file)
@@ -303,6 +303,7 @@ BOOL generate_sam_sid(char *domain_name);
 BOOL map_domain_name_to_sid(DOM_SID *sid, char **nt_domain);
 BOOL map_domain_sid_to_name(DOM_SID *sid, char *nt_domain);
 BOOL split_domain_name(const char *fullname, char *domain, char *name);
+BOOL enumtrustdoms(char ***doms, uint32 *num_entries);
 BOOL enumdomains(char ***doms, uint32 *num_entries);
 
 /*The following definitions come from  lib/signal.c  */
@@ -1290,6 +1291,8 @@ char *lp_passwd_chat(void);
 char *lp_passwordserver(void);
 char *lp_name_resolve_order(void);
 char *lp_workgroup(void);
+char *lp_trusted_domains(void);
+char *lp_trusting_domains(void);
 char *lp_username_map(void);
 char *lp_aliasname_map(void);
 char *lp_groupname_map(void);
@@ -2322,7 +2325,7 @@ BOOL make_r_logon_ctrl2(NET_R_LOGON_CTRL2 *r_l, uint32 query_level,
                                uint32 tc_status, char *trusted_domain_name);
 BOOL net_io_r_logon_ctrl2(char *desc,  NET_R_LOGON_CTRL2 *r_l, prs_struct *ps, int depth);
 BOOL make_r_trust_dom(NET_R_TRUST_DOM_LIST *r_t,
-                       uint32 num_doms, char *dom_name);
+                       uint32 num_doms, char **dom_name);
 BOOL net_io_r_trust_dom(char *desc,  NET_R_TRUST_DOM_LIST *r_t, prs_struct *ps, int depth);
 BOOL net_io_q_trust_dom(char *desc,  NET_Q_TRUST_DOM_LIST *q_l, prs_struct *ps, int depth);
 BOOL make_q_req_chal(NET_Q_REQ_CHAL *q_c,
@@ -2330,6 +2333,12 @@ BOOL make_q_req_chal(NET_Q_REQ_CHAL *q_c,
                                DOM_CHAL *clnt_chal);
 BOOL net_io_q_req_chal(char *desc,  NET_Q_REQ_CHAL *q_c, prs_struct *ps, int depth);
 BOOL net_io_r_req_chal(char *desc,  NET_R_REQ_CHAL *r_c, prs_struct *ps, int depth);
+BOOL make_q_auth(NET_Q_AUTH *q_a,
+               const char *logon_srv, const char *acct_name,
+               uint16 sec_chan, const char *comp_name,
+               DOM_CHAL *clnt_chal);
+BOOL net_io_q_auth(char *desc,  NET_Q_AUTH *q_a, prs_struct *ps, int depth);
+BOOL net_io_r_auth(char *desc,  NET_R_AUTH *r_a, prs_struct *ps, int depth);
 BOOL make_q_auth_2(NET_Q_AUTH_2 *q_a,
                const char *logon_srv, const char *acct_name,
                uint16 sec_chan, const char *comp_name,
index 4b1682afe94881242ab6f842970123c0553443e6..4d83adc36d76023514569e57cfa34860363a6fc2 100644 (file)
@@ -597,6 +597,29 @@ BOOL split_domain_name(const char *fullname, char *domain, char *name)
        return True;
 }
 
+/**************************************************************************
+ enumerates all domains for which the SAM server is responsible
+***************************************************************************/
+BOOL enumtrustdoms(char ***doms, uint32 *num_entries)
+{
+       fstring tmp;
+       char *tok;
+
+       /* add trusted domains */
+
+       tok = lp_trusted_domains();
+       if (next_token(&tok, tmp, NULL, sizeof(tmp)))
+       {
+               do
+               {
+                       add_chars_to_array(num_entries, doms, tmp);
+
+               } while (next_token(NULL, tmp, NULL, sizeof(tmp)));
+       }
+
+       return True;
+}
+
 /**************************************************************************
  enumerates all domains for which the SAM server is responsible
 ***************************************************************************/
index 7e736ad99d40c284d0eb3ce76d87c3cea60c1637..b7aef210138ce3fd4a9b4efab25486f72d34bb3e 100644 (file)
@@ -123,6 +123,8 @@ typedef struct
   char *szSocketOptions;
   char *szValidChars;
   char *szWorkGroup;
+  char *szTrustedDomains;
+  char *szTrustingDomains;
   char *szUsernameMap;
   char *szAliasnameMap;
   char *szGroupnameMap;
@@ -717,6 +719,8 @@ static struct parm_struct parm_table[] =
 
   {"Domain Options", P_SEP, P_SEPARATOR},
 
+  {"trusted domains",   P_STRING, P_GLOBAL, &Globals.szTrustedDomains,  NULL,   NULL,  0},
+  {"trusting domains",  P_STRING, P_GLOBAL, &Globals.szTrustingDomains, NULL,   NULL,  0},
   {"local group map",   P_STRING, P_GLOBAL, &Globals.szAliasnameMap,     NULL,   NULL,  0},
   {"domain group map",  P_STRING, P_GLOBAL, &Globals.szGroupnameMap,     NULL,   NULL,  0},
   {"builtin group map", P_STRING, P_GLOBAL, &Globals.szBuiltinnameMap,   NULL,   NULL,  0},
@@ -1203,6 +1207,8 @@ FN_GLOBAL_STRING(lp_passwd_chat,&Globals.szPasswdChat)
 FN_GLOBAL_STRING(lp_passwordserver,&Globals.szPasswordServer)
 FN_GLOBAL_STRING(lp_name_resolve_order,&Globals.szNameResolveOrder)
 FN_GLOBAL_STRING(lp_workgroup,&Globals.szWorkGroup)
+FN_GLOBAL_STRING(lp_trusted_domains,&Globals.szTrustedDomains)
+FN_GLOBAL_STRING(lp_trusting_domains,&Globals.szTrustingDomains)
 FN_GLOBAL_STRING(lp_username_map,&Globals.szUsernameMap)
 FN_GLOBAL_STRING(lp_aliasname_map,&Globals.szAliasnameMap)
 FN_GLOBAL_STRING(lp_groupname_map,&Globals.szGroupnameMap)
index 4864308d7015d5379378ded1be811ceefecee42b..b21f612c8a8735c22220526fea79d3ccdfbd8880 100644 (file)
@@ -294,7 +294,7 @@ BOOL net_io_r_logon_ctrl2(char *desc,  NET_R_LOGON_CTRL2 *r_l, prs_struct *ps, i
 makes an NET_R_TRUST_DOM_LIST structure.
 ********************************************************************/
 BOOL make_r_trust_dom(NET_R_TRUST_DOM_LIST *r_t,
-                       uint32 num_doms, char *dom_name)
+                       uint32 num_doms, char **dom_name)
 {
        uint32 i = 0;
 
@@ -312,7 +312,7 @@ BOOL make_r_trust_dom(NET_R_TRUST_DOM_LIST *r_t,
        for (i = 0; i < num_doms; i++)
        {
                fstring domain_name;
-               fstrcpy(domain_name, dom_name);
+               fstrcpy(domain_name, dom_name[i]);
                strupper(domain_name);
                make_unistr2(&(r_t->uni_trust_dom_name[i]), domain_name, strlen(domain_name)+1);
                /* the use of UNISTR2 here is non-standard. */
@@ -357,8 +357,8 @@ BOOL net_io_q_trust_dom(char *desc,  NET_Q_TRUST_DOM_LIST *q_l, prs_struct *ps,
        prs_debug(ps, depth, desc, "net_io_q_trust_dom");
        depth++;
 
-       prs_uint32("ptr          ", ps, depth, &(q_l->ptr          ));
-       smb_io_unistr2 ("", &(q_l->uni_server_name), q_l->ptr, ps, depth);
+       prs_uint32("ptr", ps, depth, &(q_l->ptr));
+       smb_io_unistr2 ("name", &(q_l->uni_server_name), q_l->ptr, ps, depth);
 
        prs_align(ps);
 
index 440ac87c8639567a47781b4d58cf211bde3b702f..09678e3eaf4a8fd59cb207362dee42bba1d31e35 100644 (file)
@@ -90,7 +90,7 @@ static void net_reply_logon_ctrl2(NET_Q_LOGON_CTRL2 *q_l, prs_struct *rdata,
  net_reply_trust_dom_list:
  *************************************************************************/
 static void net_reply_trust_dom_list(NET_Q_TRUST_DOM_LIST *q_t, prs_struct *rdata,
-                       uint32 num_trust_domains, char *trust_domain_name)
+                       uint32 num_trust_domains, char **trust_domain_name)
 {
        NET_R_TRUST_DOM_LIST r_t;
 
@@ -948,8 +948,10 @@ static void api_net_trust_dom_list( pipes_struct *p,
                                     prs_struct *rdata)
 {
        NET_Q_TRUST_DOM_LIST q_t;
+       char **doms = NULL;
+       uint32 num_doms = 0;
 
-       char *trusted_domain = "test_domain";
+       enumtrustdoms(&doms, &num_doms);
 
        DEBUG(6,("api_net_trust_dom_list: %d\n", __LINE__));
 
@@ -958,7 +960,9 @@ static void api_net_trust_dom_list( pipes_struct *p,
 
        /* construct reply. */
        net_reply_trust_dom_list(&q_t, rdata,
-                               1, trusted_domain);
+                               num_doms, doms);
+
+       free_char_array(num_doms, doms);
 
        DEBUG(6,("api_net_trust_dom_list: %d\n", __LINE__));
 }