pysmbd: add "session_info" arg to py_smbd_mkdir()
authorRalph Boehme <slow@samba.org>
Tue, 17 Dec 2019 13:57:53 +0000 (14:57 +0100)
committerRalph Boehme <slow@samba.org>
Fri, 20 Dec 2019 11:41:42 +0000 (11:41 +0000)
Signed-off-by: Ralph Boehme <slow@samba.org>
Reviewed-by: Stefan Metzmacher <metze@samba.org>
python/samba/ntacls.py
python/samba/tests/ntacls_backup.py
source3/smbd/pysmbd.c

index f2d7c9d5435e44d5fa12cbb98e2fb277f868711e..fe6eda269fc37e39ef67930a240705bbe72550c4 100644 (file)
@@ -564,7 +564,7 @@ def backup_offline(src_service_path, dest_tarfile_path, samdb_conn, smb_conf_pat
             src = os.path.join(dirpath, dirname)
             dst = os.path.join(dst_dirpath, dirname)
             # mkdir with metadata
-            smbd.mkdir(dst, service)
+            smbd.mkdir(dst, session_info, service)
             ntacl_sddl_str = ntacls_helper.getntacl(src, session_info, as_sddl=True)
             _create_ntacl_file(dst, ntacl_sddl_str)
 
@@ -621,7 +621,7 @@ def backup_restore(src_tarfile_path, dst_service_path, samdb_conn, smb_conf_path
                 dst = os.path.join(dst_dirpath, dirname)
                 if not os.path.isdir(dst):
                     # dst must be absolute path for smbd API
-                    smbd.mkdir(dst, service)
+                    smbd.mkdir(dst, session_info, service)
 
                 ntacl_sddl_str = _read_ntacl_file(src)
                 if ntacl_sddl_str:
index 22bebc99c865c636594acee5859d9b23b0fc686f..d072049cf950e2bbe8016cce35bd83f7b5354888 100644 (file)
@@ -111,7 +111,7 @@ class NtaclsBackupRestoreTests(SmbdBaseTests):
         """
 
         dirpath = os.path.join(self.service_root, 'a-dir')
-        smbd.mkdir(dirpath, self.service)
+        smbd.mkdir(dirpath, system_session_unix(), self.service)
         mode = os.stat(dirpath).st_mode
 
         # This works in conjunction with the TEST_UMASK in smbd_base
index f28acd93f779dc8e8d7a675f1c00be7a9f1f4f52..2fc197f91ff2c00f869d71dd0451f5311f3dff61 100644 (file)
@@ -971,10 +971,13 @@ static PyObject *py_smbd_mkdir(PyObject *self, PyObject *args, PyObject *kwargs)
 {
        const char * const kwnames[] = {
                "fname",
+               "session_info",
                "service",
                NULL
        };
        char *fname, *service = NULL;
+       PyObject *py_session = Py_None;
+       struct auth_session_info *session_info = NULL;
        TALLOC_CTX *frame = talloc_stackframe();
        struct connection_struct *conn = NULL;
        struct smb_filename *smb_fname = NULL;
@@ -983,16 +986,33 @@ static PyObject *py_smbd_mkdir(PyObject *self, PyObject *args, PyObject *kwargs)
 
        if (!PyArg_ParseTupleAndKeywords(args,
                                         kwargs,
-                                        "s|z",
+                                        "sO|z",
                                         discard_const_p(char *,
                                                         kwnames),
                                         &fname,
+                                        &py_session,
                                         &service)) {
                TALLOC_FREE(frame);
                return NULL;
        }
 
-       conn = get_conn_tos(service, NULL);
+       if (!py_check_dcerpc_type(py_session,
+                                 "samba.dcerpc.auth",
+                                 "session_info")) {
+               TALLOC_FREE(frame);
+               return NULL;
+       }
+       session_info = pytalloc_get_type(py_session,
+                                        struct auth_session_info);
+       if (session_info == NULL) {
+               PyErr_Format(PyExc_TypeError,
+                            "Expected auth_session_info for session_info argument got %s",
+                            pytalloc_get_name(py_session));
+               TALLOC_FREE(frame);
+               return NULL;
+       }
+
+       conn = get_conn_tos(service, session_info);
        if (!conn) {
                TALLOC_FREE(frame);
                return NULL;