r25598: Add missing become_root/unbecome_root around calls of add_aliases.
[samba.git] / source / python / py_ntsec.c
index 5ce5e8fc1bed18b816d1772486c947fdb81d4bd2..6cd59ae6d0eccd7b024e7cdb1babdfce25170745 100644 (file)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
+   the Free Software Foundation; either version 3 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,8 +14,7 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
 #include "python/py_common.h"
@@ -60,7 +59,7 @@ BOOL py_from_ACE(PyObject **dict, SEC_ACE *ace)
 
        *dict = Py_BuildValue("{sisisi}", "type", ace->type,
                                "flags", ace->flags,
-                               "mask", ace->info.mask);
+                               "mask", ace->access_mask);
 
        if (py_from_SID(&obj, &ace->trustee)) {
                PyDict_SetItemString(*dict, "trustee", obj);
@@ -103,7 +102,7 @@ BOOL py_to_ACE(SEC_ACE *ace, PyObject *dict)
            !PyInt_Check(obj))
                return False;
 
-       sec_access.mask = PyInt_AsLong(obj);
+       sec_access = PyInt_AsLong(obj);
 
        init_sec_ace(ace, &trustee, ace_type, sec_access, ace_flags);
 
@@ -130,7 +129,7 @@ BOOL py_from_ACL(PyObject **dict, SEC_ACL *acl)
        for (i = 0; i < acl->num_aces; i++) {
                PyObject *obj;
 
-               if (py_from_ACE(&obj, &acl->ace[i]))
+               if (py_from_ACE(&obj, &acl->aces[i]))
                        PyList_SetItem(ace_list, i, obj);
        }
 
@@ -157,16 +156,16 @@ BOOL py_to_ACL(SEC_ACL *acl, PyObject *dict, TALLOC_CTX *mem_ctx)
        
        acl->num_aces = PyList_Size(obj);
 
-       acl->ace = talloc(mem_ctx, acl->num_aces * sizeof(SEC_ACE));
+       acl->aces = TALLOC_ARRAY(mem_ctx, struct security_ace, acl->num_aces);
        acl->size = SEC_ACL_HEADER_SIZE;
 
        for (i = 0; i < acl->num_aces; i++) {
                PyObject *py_ace = PyList_GetItem(obj, i);
 
-               if (!py_to_ACE(&acl->ace[i], py_ace))
+               if (!py_to_ACE(&acl->aces[i], py_ace))
                        return False;
 
-               acl->size += acl->ace[i].size;
+               acl->size += acl->aces[i].size;
        }
 
        return True;
@@ -182,12 +181,16 @@ BOOL py_from_SECDESC(PyObject **dict, SEC_DESC *sd)
        PyDict_SetItemString(*dict, "revision", obj);
        Py_DECREF(obj);
 
+       obj = PyInt_FromLong(sd->type);
+       PyDict_SetItemString(*dict, "type", obj);
+       Py_DECREF(obj);
+
        if (py_from_SID(&obj, sd->owner_sid)) {
                PyDict_SetItemString(*dict, "owner_sid", obj);
                Py_DECREF(obj);
        }
 
-       if (py_from_SID(&obj, sd->grp_sid)) {
+       if (py_from_SID(&obj, sd->group_sid)) {
                PyDict_SetItemString(*dict, "group_sid", obj);
                Py_DECREF(obj);
        }
@@ -209,6 +212,7 @@ BOOL py_to_SECDESC(SEC_DESC **sd, PyObject *dict, TALLOC_CTX *mem_ctx)
 {
        PyObject *obj;
        uint16 revision;
+       uint16 type = SEC_DESC_SELF_RELATIVE;
        DOM_SID owner_sid, group_sid;
        SEC_ACL sacl, dacl;
        BOOL got_dacl = False, got_sacl = False;
@@ -222,6 +226,12 @@ BOOL py_to_SECDESC(SEC_DESC **sd, PyObject *dict, TALLOC_CTX *mem_ctx)
 
        revision = PyInt_AsLong(obj);
 
+       if ((obj = PyDict_GetItemString(dict, "type"))) {
+               if (obj != Py_None) {
+                       type = PyInt_AsLong(obj);
+               }
+       }
+
        if ((obj = PyDict_GetItemString(dict, "owner_sid"))) {
 
                if (obj != Py_None) {
@@ -276,7 +286,7 @@ BOOL py_to_SECDESC(SEC_DESC **sd, PyObject *dict, TALLOC_CTX *mem_ctx)
        {
                size_t sd_size;
 
-               *sd = make_sec_desc(mem_ctx, revision, SEC_DESC_SELF_RELATIVE,
+               *sd = make_sec_desc(mem_ctx, revision, type,
                            got_owner_sid ? &owner_sid : NULL, 
                            got_group_sid ? &group_sid : NULL,
                            got_sacl ? &sacl : NULL,