SOURCES: samba-force-group.patch (NEW) - bug #6155 in 3.3.1
wolvverine
wolvverine at pld-linux.org
Thu Mar 12 12:51:17 CET 2009
Author: wolvverine Date: Thu Mar 12 11:51:17 2009 GMT
Module: SOURCES Tag: HEAD
---- Log message:
- bug #6155 in 3.3.1
---- Files affected:
SOURCES:
samba-force-group.patch (NONE -> 1.1) (NEW)
---- Diffs:
================================================================
Index: SOURCES/samba-force-group.patch
diff -u /dev/null SOURCES/samba-force-group.patch:1.1
--- /dev/null Thu Mar 12 12:51:17 2009
+++ SOURCES/samba-force-group.patch Thu Mar 12 12:51:11 2009
@@ -0,0 +1,83 @@
+diff --git a/source/include/smb.h b/source/include/smb.h
+index a98d151..56d9461 100644
+--- a/source/include/smb.h
++++ b/source/include/smb.h
+@@ -597,6 +597,12 @@ typedef struct connection_struct {
+ */
+ struct auth_serversupplied_info *server_info;
+
++ /*
++ * If the "force group" parameter is set, this is the primary gid that
++ * may be used in the users token, depending on the vuid using this tid.
++ */
++ gid_t force_group_gid;
++
+ char client_address[INET6_ADDRSTRLEN]; /* String version of client IP address. */
+
+ uint16 vuid; /* vuid of user who *opened* this connection, or UID_FIELD_INVALID */
+diff --git a/source/smbd/conn.c b/source/smbd/conn.c
+index 7f34d2b..a6eafcf 100644
+--- a/source/smbd/conn.c
++++ b/source/smbd/conn.c
+@@ -145,6 +145,7 @@ find_again:
+ return NULL;
+ }
+ conn->cnum = i;
++ conn->force_group_gid = (gid_t)-1;
+
+ bitmap_set(bmap, i);
+
+diff --git a/source/smbd/service.c b/source/smbd/service.c
+index c39584a..5e75fce 100644
+--- a/source/smbd/service.c
++++ b/source/smbd/service.c
+@@ -834,6 +834,14 @@ static connection_struct *make_connection_snum(int snum, user_struct *vuser,
+ *pstatus = status;
+ return NULL;
+ }
++
++ /*
++ * We need to cache this gid, to use within
++ * change_to_user() separately from the conn->server_info
++ * struct. We only use conn->server_info directly if
++ * "force_user" was set.
++ */
++ conn->force_group_gid = conn->server_info->utok.gid;
+ }
+
+ conn->vuid = (vuser != NULL) ? vuser->vuid : UID_FIELD_INVALID;
+diff --git a/source/smbd/uid.c b/source/smbd/uid.c
+index 119a155..02f8cc9 100644
+--- a/source/smbd/uid.c
++++ b/source/smbd/uid.c
+@@ -256,6 +256,8 @@ bool change_to_user(connection_struct *conn, uint16 vuid)
+
+ if((group_c = *lp_force_group(snum))) {
+
++ SMB_ASSERT(conn->force_group_gid != (gid_t)-1);
++
+ if(group_c == '+') {
+
+ /*
+@@ -268,15 +270,18 @@ bool change_to_user(connection_struct *conn, uint16 vuid)
+ int i;
+ for (i = 0; i < num_groups; i++) {
+ if (group_list[i]
+- == conn->server_info->utok.gid) {
+- gid = conn->server_info->utok.gid;
++ == conn->force_group_gid) {
++ conn->server_info->utok.gid =
++ conn->force_group_gid;
++ gid = conn->force_group_gid;
+ gid_to_sid(&conn->server_info->ptok
+ ->user_sids[1], gid);
+ break;
+ }
+ }
+ } else {
+- gid = conn->server_info->utok.gid;
++ conn->server_info->utok.gid = conn->force_group_gid;
++ gid = conn->force_group_gid;
+ gid_to_sid(&conn->server_info->ptok->user_sids[1],
+ gid);
+ }
================================================================
More information about the pld-cvs-commit
mailing list