r25598: Add missing become_root/unbecome_root around calls of add_aliases.
[sfrench/samba-autobuild/.git] / source3 / python / py_samr_conv.c
1 /* 
2    Python wrappers for DCERPC/SMB client routines.
3
4    Copyright (C) Tim Potter, 2002
5    
6    This program is free software; you can redistribute it and/or modify
7    it under the terms of the GNU General Public License as published by
8    the Free Software Foundation; either version 3 of the License, or
9    (at your option) any later version.
10    
11    This program is distributed in the hope that it will be useful,
12    but WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14    GNU General Public License for more details.
15    
16    You should have received a copy of the GNU General Public License
17    along with this program.  If not, see <http://www.gnu.org/licenses/>.
18 */
19
20 #include "python/py_samr.h"
21 #include "python/py_conv.h"
22
23 /*
24  * Convert between SAM_USER_INFO_16 and Python
25  */
26
27 struct pyconv py_SAM_USER_INFO_16[] = {
28         { "acb_info", PY_UINT32, offsetof(SAM_USER_INFO_16, acb_info) },
29         { NULL }
30 };
31
32 BOOL py_from_SAM_USER_INFO_16(PyObject **dict, SAM_USER_INFO_16 *info)
33 {
34         *dict = from_struct(info, py_SAM_USER_INFO_16);
35         PyDict_SetItemString(*dict, "level", PyInt_FromLong(16));
36         return True;
37 }
38
39 BOOL py_to_SAM_USER_INFO_16(SAM_USER_INFO_16 *info, PyObject *dict)
40 {
41         PyObject *obj, *dict_copy = PyDict_Copy(dict);
42         BOOL result = False;
43
44         if (!(obj = PyDict_GetItemString(dict_copy, "level")) ||
45             !PyInt_Check(obj))
46                 goto done;
47
48         PyDict_DelItemString(dict_copy, "level");
49
50         if (!to_struct(info, dict_copy, py_SAM_USER_INFO_16))
51                 goto done;
52
53         result = True;
54
55 done:
56         Py_DECREF(dict_copy);
57         return result;
58 }
59
60 /*
61  * Convert between SAM_USER_INFO_21 and Python
62  */
63
64 struct pyconv py_SAM_USER_INFO_21[] = {
65         { NULL }
66 };
67
68 BOOL py_from_SAM_USER_INFO_21(PyObject **dict, SAM_USER_INFO_21 *info)
69 {
70         *dict = from_struct(info, py_SAM_USER_INFO_21);
71         PyDict_SetItemString(*dict, "level", PyInt_FromLong(21));
72         return True;
73 }
74
75 BOOL py_to_SAM_USER_INFO_21(SAM_USER_INFO_21 *info, PyObject *dict)
76 {
77         PyObject *obj, *dict_copy = PyDict_Copy(dict);
78         BOOL result = False;
79
80         if (!(obj = PyDict_GetItemString(dict_copy, "level")) ||
81             !PyInt_Check(obj))
82                 goto done;
83
84         PyDict_DelItemString(dict_copy, "level");
85
86         if (!to_struct(info, dict_copy, py_SAM_USER_INFO_21))
87                 goto done;
88
89         result = True;
90
91 done:
92         Py_DECREF(dict_copy);
93         return result;
94 }
95
96 /*
97  * Convert between acct_info and Python 
98  */
99
100 BOOL py_from_acct_info(PyObject **array, struct acct_info *info, int num_accts)
101 {
102         int i;
103
104         *array = PyList_New(num_accts);
105
106         for (i = 0; i < num_accts; i++) {
107                 PyObject *obj;  
108
109                 obj = PyDict_New();
110                 
111                 PyDict_SetItemString(
112                         obj, "name", PyString_FromString(info[i].acct_name));
113
114                 PyDict_SetItemString(
115                         obj, "description", 
116                         PyString_FromString(info[i].acct_desc));
117
118                 PyDict_SetItemString(obj, "rid", PyInt_FromLong(info[i].rid));
119
120                 PyList_SetItem(*array, i, obj);
121         }
122
123         return True;
124 }
125
126 BOOL py_to_acct_info(PRINTER_INFO_3 *info, PyObject *dict,
127                      TALLOC_CTX *mem_ctx)
128 {
129         return False;
130 }