Fix clang 9 missing-field-initializer warnings
[amitay/samba.git] / source3 / smbd / pysmbd.c
index a00c11f3fe948296b2978fa685f242fa6adaa319..9f5663e2e43e1ff9e0373a5d58626488346628ab 100644 (file)
@@ -193,13 +193,13 @@ static NTSTATUS init_files_struct(TALLOC_CTX *mem_ctx,
        fsp->file_id = vfs_file_id_from_sbuf(conn, &smb_fname->st);
        fsp->vuid = UID_FIELD_INVALID;
        fsp->file_pid = 0;
-       fsp->can_lock = True;
-       fsp->can_read = True;
-       fsp->can_write = True;
+       fsp->fsp_flags.can_lock = true;
+       fsp->fsp_flags.can_read = true;
+       fsp->fsp_flags.can_write = true;
        fsp->print_file = NULL;
-       fsp->modified = False;
+       fsp->fsp_flags.modified = false;
        fsp->sent_oplock_break = NO_BREAK_SENT;
-       fsp->is_directory = S_ISDIR(smb_fname->st.st_ex_mode);
+       fsp->fsp_flags.is_directory = S_ISDIR(smb_fname->st.st_ex_mode);
 
        *_fsp = fsp;
 
@@ -262,6 +262,7 @@ static NTSTATUS get_nt_acl_conn(TALLOC_CTX *mem_ctx,
                                        fname,
                                        NULL,
                                        NULL,
+                                       0,
                                        lp_posix_pathnames() ?
                                                SMB_FILENAME_POSIX_PATH : 0);
 
@@ -270,13 +271,15 @@ static NTSTATUS get_nt_acl_conn(TALLOC_CTX *mem_ctx,
                return NT_STATUS_NO_MEMORY;
        }
 
-       status = SMB_VFS_GET_NT_ACL(conn,
+       status = SMB_VFS_GET_NT_ACL_AT(conn,
+                               conn->cwd_fsp,
                                smb_fname,
                                security_info_wanted,
                                mem_ctx,
                                sd);
        if (!NT_STATUS_IS_OK(status)) {
-               DEBUG(0,("get_nt_acl_conn: get_nt_acl returned %s.\n", nt_errstr(status)));
+               DBG_ERR("get_nt_acl_at returned %s.\n",
+                       nt_errstr(status));
        }
 
        TALLOC_FREE(frame);
@@ -686,8 +689,8 @@ static PyObject *py_smbd_set_nt_acl(PyObject *self, PyObject *args, PyObject *kw
                "fname",
                "security_info_sent",
                "sd",
-               "service",
                "session_info",
+               "service",
                NULL
        };
 
@@ -703,13 +706,13 @@ static PyObject *py_smbd_set_nt_acl(PyObject *self, PyObject *args, PyObject *kw
 
        frame = talloc_stackframe();
 
-       if (!PyArg_ParseTupleAndKeywords(args, kwargs, "siO|zO",
+       if (!PyArg_ParseTupleAndKeywords(args, kwargs, "siOO|z",
                                         discard_const_p(char *, kwnames),
                                         &fname,
                                         &security_info_sent,
                                         &py_sd,
-                                        &service,
-                                        &py_session)) {
+                                        &py_session,
+                                        &service)) {
                TALLOC_FREE(frame);
                return NULL;
        }
@@ -719,21 +722,19 @@ static PyObject *py_smbd_set_nt_acl(PyObject *self, PyObject *args, PyObject *kw
                return NULL;
        }
 
-       if (py_session != Py_None) {
-               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) {
-                       PyErr_Format(PyExc_TypeError,
-                                    "Expected auth_session_info for session_info argument got %s",
-                                    pytalloc_get_name(py_session));
-                       return 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));
+               return NULL;
        }
 
        conn = get_conn_tos(service, session_info);
@@ -759,8 +760,8 @@ static PyObject *py_smbd_get_nt_acl(PyObject *self, PyObject *args, PyObject *kw
        const char * const kwnames[] = {
                "fname",
                "security_info_wanted",
-               "service",
                "session_info",
+               "service",
                NULL
        };
        char *fname, *service = NULL;
@@ -776,34 +777,32 @@ static PyObject *py_smbd_get_nt_acl(PyObject *self, PyObject *args, PyObject *kw
 
        ret = PyArg_ParseTupleAndKeywords(args,
                                          kwargs,
-                                         "si|zO",
+                                         "siO|z",
                                          discard_const_p(char *, kwnames),
                                          &fname,
                                          &security_info_wanted,
-                                         &service,
-                                         &py_session);
+                                         &py_session,
+                                         &service);
        if (!ret) {
                TALLOC_FREE(frame);
                return NULL;
        }
 
-       if (py_session != Py_None) {
-               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) {
-                       PyErr_Format(
-                               PyExc_TypeError,
-                               "Expected auth_session_info for "
-                               "session_info argument got %s",
-                               pytalloc_get_name(py_session));
-                       return 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));
+               return NULL;
        }
 
        conn = get_conn_tos(service, session_info);
@@ -831,6 +830,7 @@ static PyObject *py_smbd_set_sys_acl(PyObject *self, PyObject *args, PyObject *k
                "fname",
                "acl_type",
                "acl",
+               "session_info",
                "service",
                NULL
        };
@@ -838,15 +838,18 @@ static PyObject *py_smbd_set_sys_acl(PyObject *self, PyObject *args, PyObject *k
        int ret;
        char *fname, *service = NULL;
        PyObject *py_acl;
+       PyObject *py_session = Py_None;
+       struct auth_session_info *session_info = NULL;
        struct smb_acl_t *acl;
        int acl_type;
        connection_struct *conn;
 
-       if (!PyArg_ParseTupleAndKeywords(args, kwargs, "siO|z",
+       if (!PyArg_ParseTupleAndKeywords(args, kwargs, "siOO|z",
                                         discard_const_p(char *, kwnames),
                                         &fname,
                                         &acl_type,
                                         &py_acl,
+                                        &py_session,
                                         &service)) {
                TALLOC_FREE(frame);
                return NULL;
@@ -857,7 +860,23 @@ static PyObject *py_smbd_set_sys_acl(PyObject *self, PyObject *args, PyObject *k
                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;
@@ -884,11 +903,14 @@ static PyObject *py_smbd_get_sys_acl(PyObject *self, PyObject *args, PyObject *k
        const char * const kwnames[] = {
                "fname",
                "acl_type",
+               "session_info",
                "service",
                NULL
        };
        char *fname;
        PyObject *py_acl;
+       PyObject *py_session = Py_None;
+       struct auth_session_info *session_info = NULL;
        struct smb_acl_t *acl;
        int acl_type;
        TALLOC_CTX *frame = talloc_stackframe();
@@ -896,16 +918,33 @@ static PyObject *py_smbd_get_sys_acl(PyObject *self, PyObject *args, PyObject *k
        char *service = NULL;
        struct smb_filename *smb_fname = NULL;
 
-       if (!PyArg_ParseTupleAndKeywords(args, kwargs, "si|z",
+       if (!PyArg_ParseTupleAndKeywords(args, kwargs, "siO|z",
                                         discard_const_p(char *, kwnames),
                                         &fname,
                                         &acl_type,
+                                        &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;
@@ -935,10 +974,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;
@@ -947,16 +989,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;
@@ -966,6 +1025,7 @@ static PyObject *py_smbd_mkdir(PyObject *self, PyObject *args, PyObject *kwargs)
                                        fname,
                                        NULL,
                                        NULL,
+                                       0,
                                        lp_posix_pathnames() ?
                                        SMB_FILENAME_POSIX_PATH : 0);
 
@@ -1003,10 +1063,13 @@ static PyObject *py_smbd_create_file(PyObject *self, PyObject *args, PyObject *k
 {
        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 files_struct *fsp = NULL;
@@ -1014,16 +1077,33 @@ static PyObject *py_smbd_create_file(PyObject *self, PyObject *args, PyObject *k
 
        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;
@@ -1084,7 +1164,7 @@ static PyMethodDef py_smbd_methods[] = {
                PY_DISCARD_FUNC_SIG(PyCFunction, py_smbd_create_file),
                METH_VARARGS|METH_KEYWORDS,
                NULL },
-       { NULL }
+       {0}
 };
 
 void initsmbd(void);