From 27922c0430bf28dca910d2a2903cf410a4187643 Mon Sep 17 00:00:00 2001 From: David O'Neill Date: Mon, 15 Jan 2001 18:36:50 +0000 Subject: Changes from APPLIANCE_HEAD: source/rpc_parse/parse_lsa.c - off by one unistr length bug in init_lsa_trans_name() source/lib/util_sid.c - resolve more BUILTIN sid values to names. source/nsswitch/wb_client.c - fix typo in debug message - set errno on error so we don't get bogus value from last failure. source/rpc_server/srv_spoolss_nt.c - add debug to track number of open printer handles for ease of tracking handle leaks in the future. source/rpc_server/srv_lsa.c - fix off-by-one string bug. This was preventing NT from displaying names for well-know SIDs in printer permissions dialog. (This used to be commit 59229b9025cff54cbdd05e374616ffbf9c6fee33) --- source3/lib/util_sid.c | 13 +++++++++---- source3/nsswitch/wb_client.c | 11 +++++++++-- source3/rpc_parse/parse_lsa.c | 2 +- source3/rpc_server/srv_lsa.c | 6 +++--- source3/rpc_server/srv_spoolss_nt.c | 2 ++ 5 files changed, 24 insertions(+), 10 deletions(-) (limited to 'source3') diff --git a/source3/lib/util_sid.c b/source3/lib/util_sid.c index 94144bbbd1..98d4e77712 100644 --- a/source3/lib/util_sid.c +++ b/source3/lib/util_sid.c @@ -76,8 +76,14 @@ static known_sid_users nt_authority_users[] = { { 18, SID_NAME_ALIAS, "SYSTEM"}, { 0, (enum SID_NAME_USE)0, NULL}}; -static known_sid_users builtin_users[] = { - { DOMAIN_USER_RID_ADMIN, SID_NAME_USER, "Administrator" }, +static known_sid_users builtin_groups[] = { + { BUILTIN_ALIAS_RID_ADMINS, SID_NAME_ALIAS, "Administrators" }, + { BUILTIN_ALIAS_RID_USERS, SID_NAME_ALIAS, "Users" }, + { BUILTIN_ALIAS_RID_GUESTS, SID_NAME_ALIAS, "Guests" }, + { BUILTIN_ALIAS_RID_ACCOUNT_OPS, SID_NAME_ALIAS, "Account Operators" }, + { BUILTIN_ALIAS_RID_SYSTEM_OPS, SID_NAME_ALIAS, "Server Operators" }, + { BUILTIN_ALIAS_RID_PRINT_OPS, SID_NAME_ALIAS, "Print Operators" }, + { BUILTIN_ALIAS_RID_BACKUP_OPS, SID_NAME_ALIAS, "Backup Operators" }, { 0, (enum SID_NAME_USE)0, NULL}}; static struct sid_name_map_info @@ -90,8 +96,7 @@ sid_name_map[] = { { &global_sam_sid, global_myname, NULL}, { &global_sam_sid, global_myworkgroup, NULL}, - { &global_sid_Builtin, "BUILTIN", NULL}, - { &global_sid_Builtin, "", &builtin_users[0]}, + { &global_sid_Builtin, "BUILTIN", &builtin_groups[0]}, { &global_sid_World_Domain, "", &everyone_users[0] }, { &global_sid_Creator_Owner_Domain, "", &creator_owner_users[0] }, { &global_sid_NT_Authority, "NT Authority", &nt_authority_users[0] }, diff --git a/source3/nsswitch/wb_client.c b/source3/nsswitch/wb_client.c index 142c61d9c1..77c48352a3 100644 --- a/source3/nsswitch/wb_client.c +++ b/source3/nsswitch/wb_client.c @@ -266,8 +266,8 @@ int winbind_initgroups(char *user, gid_t gid) result = wb_getgroups(user, &groups); - DEBUG(10,("wb_getgroups: %s: result = %s\n", user, result == -1 ? - "FAIL" : "SUCCESS")); + DEBUG(10,("winbind_getgroups: %s: result = %s\n", user, + result == -1 ? "FAIL" : "SUCCESS")); if (result != -1) { int ngroups = result, i; @@ -303,6 +303,13 @@ int winbind_initgroups(char *user, gid_t gid) result = -1; goto done; } + + } else { + + /* The call failed. Set errno to something so we don't get + a bogus value from the last failed system call. */ + + errno = EIO; } /* Free response data if necessary */ diff --git a/source3/rpc_parse/parse_lsa.c b/source3/rpc_parse/parse_lsa.c index 6cef8c9920..97aae2d65b 100644 --- a/source3/rpc_parse/parse_lsa.c +++ b/source3/rpc_parse/parse_lsa.c @@ -34,7 +34,7 @@ static BOOL lsa_io_trans_names(char *desc, LSA_TRANS_NAME_ENUM *trn, prs_struct void init_lsa_trans_name(LSA_TRANS_NAME *trn, UNISTR2 *uni_name, uint16 sid_name_use, char *name, uint32 idx) { - int len_name = strlen(name)+1; + int len_name = strlen(name); if(len_name == 0) len_name = 1; diff --git a/source3/rpc_server/srv_lsa.c b/source3/rpc_server/srv_lsa.c index ed65e787b4..3538beefda 100644 --- a/source3/rpc_server/srv_lsa.c +++ b/source3/rpc_server/srv_lsa.c @@ -88,13 +88,13 @@ Init dom_query static void init_dom_query(DOM_QUERY *d_q, char *dom_name, DOM_SID *dom_sid) { - int domlen = (dom_name != NULL) ? strlen(dom_name)+1 : 0; + int domlen = (dom_name != NULL) ? strlen(dom_name) : 0; d_q->uni_dom_max_len = domlen * 2; d_q->uni_dom_str_len = domlen * 2; - d_q->buffer_dom_name = (dom_name != 0) ? 1 : 0; - d_q->buffer_dom_sid = (dom_sid != NULL) ? 1 : 0; + d_q->buffer_dom_name = dom_name ? 1 : 0; + d_q->buffer_dom_sid = dom_sid ? 1 : 0; /* this string is supposed to be character short */ init_unistr2(&d_q->uni_domain_name, dom_name, domlen); diff --git a/source3/rpc_server/srv_spoolss_nt.c b/source3/rpc_server/srv_spoolss_nt.c index 23f8ab15ef..4355e2eb59 100644 --- a/source3/rpc_server/srv_spoolss_nt.c +++ b/source3/rpc_server/srv_spoolss_nt.c @@ -526,6 +526,8 @@ static BOOL open_printer_hnd(POLICY_HND *hnd, char *name) return False; } + DEBUG(5, ("%d printer handles active\n", ubi_dlCount(&Printer_list))); + return True; } -- cgit