mirror of
https://github.com/samba-team/samba.git
synced 2025-12-14 20:23:54 +03:00
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 commit is contained in:
@@ -76,8 +76,14 @@ static known_sid_users nt_authority_users[] = {
|
|||||||
{ 18, SID_NAME_ALIAS, "SYSTEM"},
|
{ 18, SID_NAME_ALIAS, "SYSTEM"},
|
||||||
{ 0, (enum SID_NAME_USE)0, NULL}};
|
{ 0, (enum SID_NAME_USE)0, NULL}};
|
||||||
|
|
||||||
static known_sid_users builtin_users[] = {
|
static known_sid_users builtin_groups[] = {
|
||||||
{ DOMAIN_USER_RID_ADMIN, SID_NAME_USER, "Administrator" },
|
{ 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}};
|
{ 0, (enum SID_NAME_USE)0, NULL}};
|
||||||
|
|
||||||
static struct sid_name_map_info
|
static struct sid_name_map_info
|
||||||
@@ -90,8 +96,7 @@ sid_name_map[] =
|
|||||||
{
|
{
|
||||||
{ &global_sam_sid, global_myname, NULL},
|
{ &global_sam_sid, global_myname, NULL},
|
||||||
{ &global_sam_sid, global_myworkgroup, NULL},
|
{ &global_sam_sid, global_myworkgroup, NULL},
|
||||||
{ &global_sid_Builtin, "BUILTIN", NULL},
|
{ &global_sid_Builtin, "BUILTIN", &builtin_groups[0]},
|
||||||
{ &global_sid_Builtin, "", &builtin_users[0]},
|
|
||||||
{ &global_sid_World_Domain, "", &everyone_users[0] },
|
{ &global_sid_World_Domain, "", &everyone_users[0] },
|
||||||
{ &global_sid_Creator_Owner_Domain, "", &creator_owner_users[0] },
|
{ &global_sid_Creator_Owner_Domain, "", &creator_owner_users[0] },
|
||||||
{ &global_sid_NT_Authority, "NT Authority", &nt_authority_users[0] },
|
{ &global_sid_NT_Authority, "NT Authority", &nt_authority_users[0] },
|
||||||
|
|||||||
@@ -266,8 +266,8 @@ int winbind_initgroups(char *user, gid_t gid)
|
|||||||
|
|
||||||
result = wb_getgroups(user, &groups);
|
result = wb_getgroups(user, &groups);
|
||||||
|
|
||||||
DEBUG(10,("wb_getgroups: %s: result = %s\n", user, result == -1 ?
|
DEBUG(10,("winbind_getgroups: %s: result = %s\n", user,
|
||||||
"FAIL" : "SUCCESS"));
|
result == -1 ? "FAIL" : "SUCCESS"));
|
||||||
|
|
||||||
if (result != -1) {
|
if (result != -1) {
|
||||||
int ngroups = result, i;
|
int ngroups = result, i;
|
||||||
@@ -303,6 +303,13 @@ int winbind_initgroups(char *user, gid_t gid)
|
|||||||
result = -1;
|
result = -1;
|
||||||
goto done;
|
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 */
|
/* Free response data if necessary */
|
||||||
|
|||||||
@@ -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,
|
void init_lsa_trans_name(LSA_TRANS_NAME *trn, UNISTR2 *uni_name,
|
||||||
uint16 sid_name_use, char *name, uint32 idx)
|
uint16 sid_name_use, char *name, uint32 idx)
|
||||||
{
|
{
|
||||||
int len_name = strlen(name)+1;
|
int len_name = strlen(name);
|
||||||
|
|
||||||
if(len_name == 0)
|
if(len_name == 0)
|
||||||
len_name = 1;
|
len_name = 1;
|
||||||
|
|||||||
@@ -88,13 +88,13 @@ Init dom_query
|
|||||||
|
|
||||||
static void init_dom_query(DOM_QUERY *d_q, char *dom_name, DOM_SID *dom_sid)
|
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_max_len = domlen * 2;
|
||||||
d_q->uni_dom_str_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_name = dom_name ? 1 : 0;
|
||||||
d_q->buffer_dom_sid = (dom_sid != NULL) ? 1 : 0;
|
d_q->buffer_dom_sid = dom_sid ? 1 : 0;
|
||||||
|
|
||||||
/* this string is supposed to be character short */
|
/* this string is supposed to be character short */
|
||||||
init_unistr2(&d_q->uni_domain_name, dom_name, domlen);
|
init_unistr2(&d_q->uni_domain_name, dom_name, domlen);
|
||||||
|
|||||||
@@ -526,6 +526,8 @@ static BOOL open_printer_hnd(POLICY_HND *hnd, char *name)
|
|||||||
return False;
|
return False;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DEBUG(5, ("%d printer handles active\n", ubi_dlCount(&Printer_list)));
|
||||||
|
|
||||||
return True;
|
return True;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user