r25598: Add missing become_root/unbecome_root around calls of add_aliases.
[samba.git] / source / python / py_spoolss.c
index ef61d02db6d6a5e83ee51769b40a78ff7a237da6..2543324b318262d4815dc31286f872f88f9b7e2f 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_spoolss.h"
 
 PyObject *spoolss_error, *spoolss_werror;
 
-/*
- * Routines to convert from python hashes to Samba structures
- */
-
-PyObject *new_spoolss_policy_hnd_object(struct cli_state *cli, 
-                                       TALLOC_CTX *mem_ctx, POLICY_HND *pol)
-{
-       spoolss_policy_hnd_object *o;
-
-       o = PyObject_New(spoolss_policy_hnd_object, &spoolss_policy_hnd_type);
-
-       o->cli = cli;
-       o->mem_ctx = mem_ctx;
-       memcpy(&o->pol, pol, sizeof(POLICY_HND));
-
-       return (PyObject*)o;
-}
-     
 /* 
  * Method dispatch table
  */
@@ -51,82 +32,119 @@ static PyMethodDef spoolss_methods[] = {
        /* Open/close printer handles */
        
        { "openprinter", (PyCFunction)spoolss_openprinter, METH_VARARGS | METH_KEYWORDS, 
-         "openprinter(printername, [creds, access]) -> <spoolss hnd object>
-
-Open a printer given by printername in UNC format.  Optionally a dictionary
-of (domain, username, password) may be given in which case they are used
-when opening the RPC pipe.  An access mask may also be given which defaults
-to MAXIMUM_ALLOWED_ACCESS.
-
-Example:
-
->>> hnd = spoolss.openprinter(\"\\\\\\\\NPSD-PDC2\\\\meanie\")
-"},
+         "Open a printer by name in UNC format.\n"
+"\n"
+"Optionally a dictionary of (domain, username, password) may be given in\n"
+"which case they are used when opening the RPC pipe.  An access mask may\n"
+"also be given which defaults to MAXIMUM_ALLOWED_ACCESS.\n"
+"\n"
+"Example:\n"
+"\n"
+">>> hnd = spoolss.openprinter(\"\\\\\\\\NPSD-PDC2\\\\meanie\")"},
        
        { "closeprinter", spoolss_closeprinter, METH_VARARGS, 
-         "closeprinter()
-
-Close a printer handle opened with openprinter or addprinter.
+         "Close a printer handle opened with openprinter or addprinter.\n"
+"\n"
+"Example:\n"
+"\n"
+">>> spoolss.closeprinter(hnd)"},
 
-Example:
-
->>> spoolss.closeprinter(hnd)
-"},
+       { "addprinterex", (PyCFunction)spoolss_addprinterex, METH_VARARGS, 
+         "addprinterex()"},
 
        /* Server enumeratation functions */
 
        { "enumprinters", (PyCFunction)spoolss_enumprinters, 
          METH_VARARGS | METH_KEYWORDS,
-         "enumprinters(server, [creds, level, flags]) -> list
-
-Return a list of printers on a print server.  The credentials, info level
-and flags may be specified as keyword arguments.
-
-Example:
-
->>> print spoolss.enumprinters(\"\\\\\\\\npsd-pdc2\")
-[{'comment': 'i am a comment', 'printer_name': 'meanie', 'flags': 8388608, 
-  'description': 'meanie,Generic / Text Only,i am a location'}, 
- {'comment': '', 'printer_name': 'fileprint', 'flags': 8388608, 
-  'description': 'fileprint,Generic / Text Only,'}]
-"},
+         "Enumerate printers on a print server.\n"
+"\n"
+"Return a list of printers on a print server.  The credentials, info level\n"
+"and flags may be specified as keyword arguments.\n"
+"\n"
+"Example:\n"
+"\n"
+">>> print spoolss.enumprinters(\"\\\\\\\\npsd-pdc2\")\n"
+"[{'comment': 'i am a comment', 'printer_name': 'meanie', 'flags': 8388608, \n"
+"  'description': 'meanie,Generic / Text Only,i am a location'}, \n"
+" {'comment': '', 'printer_name': 'fileprint', 'flags': 8388608, \n"
+"  'description': 'fileprint,Generic / Text Only,'}]"},
 
        { "enumports", (PyCFunction)spoolss_enumports, 
          METH_VARARGS | METH_KEYWORDS,
-         "enumports(server, [creds, level]) -> list
-
-Return a list of ports on a print server.
-
-Example:
-
->>> print spoolss.enumports(\"\\\\\\\\npsd-pdc2\")
-[{'name': 'LPT1:'}, {'name': 'LPT2:'}, {'name': 'COM1:'}, {'name': 'COM2:'}, 
- {'name': 'FILE:'}, {'name': '\\\\nautilus1\\zpekt3r'}]
-"},
+         "Enumerate ports on a print server.\n"
+"\n"
+"Return a list of ports on a print server.\n"
+"\n"
+"Example:\n"
+"\n"
+">>> print spoolss.enumports(\"\\\\\\\\npsd-pdc2\")\n"
+"[{'name': 'LPT1:'}, {'name': 'LPT2:'}, {'name': 'COM1:'}, \n"
+"{'name': 'COM2:'}, {'name': 'FILE:'}, {'name': '\\\\nautilus1\\zpekt3r'}]"},
 
        { "enumprinterdrivers", (PyCFunction)spoolss_enumprinterdrivers, 
          METH_VARARGS | METH_KEYWORDS, 
-         "enumprinterdrivers(server, [creds, level, arch]) -> list
+         "Enumerate printer drivers on a print server.\n"
+"\n"
+"Return a list of printer drivers."},
 
-Return a list of printer drivers.
-"},
        /* Miscellaneous other commands */
 
-       { "getprinterdriverdir", (PyCFunction)spoolss_getprinterdriverdir, METH_VARARGS |
-         METH_KEYWORDS, "getprinterdriverdir(server, [creds]) -> string
-
-Return the printer driver directory for a given architecture.  The 
-architecture defaults to \"Windows NT x86\".
-"},
+       { "getprinterdriverdir", (PyCFunction)spoolss_getprinterdriverdir, 
+         METH_VARARGS | METH_KEYWORDS, 
+         "Return printer driver directory.\n"
+"\n"
+"Return the printer driver directory for a given architecture.  The\n"
+"architecture defaults to \"Windows NT x86\"."},
 
        /* Other stuff - this should really go into a samba config module
           but for the moment let's leave it here. */
 
        { "setup_logging", (PyCFunction)py_setup_logging, 
-         METH_VARARGS | METH_KEYWORDS, "" },
+         METH_VARARGS | METH_KEYWORDS, 
+         "Set up debug logging.\n"
+"\n"
+"Initialises Samba's debug logging system.  One argument is expected which\n"
+"is a boolean specifying whether debugging is interactive and sent to stdout\n"
+"or logged to a file.\n"
+"\n"
+"Example:\n"
+"\n"
+">>> spoolss.setup_logging(interactive = 1)" },
+
+       { "get_debuglevel", (PyCFunction)get_debuglevel, 
+         METH_VARARGS, 
+         "Set the current debug level.\n"
+"\n"
+"Example:\n"
+"\n"
+">>> spoolss.get_debuglevel()\n"
+"0" },
+
+       { "set_debuglevel", (PyCFunction)set_debuglevel, 
+         METH_VARARGS, 
+         "Get the current debug level.\n"
+"\n"
+"Example:\n"
+"\n"
+">>> spoolss.set_debuglevel(10)" },
+
+       /* Printer driver routines */
+       
+       { "addprinterdriver", (PyCFunction)spoolss_addprinterdriver, 
+         METH_VARARGS | METH_KEYWORDS, 
+         "Add a printer driver." },
+
+       { "addprinterdriverex", (PyCFunction)spoolss_addprinterdriverex, 
+         METH_VARARGS | METH_KEYWORDS, 
+         "Add a printer driver." },
 
-       { "get_debuglevel", (PyCFunction)get_debuglevel, METH_VARARGS, "" },
-       { "set_debuglevel", (PyCFunction)set_debuglevel, METH_VARARGS, "" },
+       { "deleteprinterdriver", (PyCFunction)spoolss_deleteprinterdriver, 
+         METH_VARARGS | METH_KEYWORDS, 
+         "Delete a printer driver." },
+
+       { "deleteprinterdriverex", (PyCFunction)spoolss_deleteprinterdriverex, 
+         METH_VARARGS | METH_KEYWORDS, 
+         "Delete a printer driver." },
 
        { NULL }
 };
@@ -137,112 +155,142 @@ static PyMethodDef spoolss_hnd_methods[] = {
 
        /* Printer info */
 
-       { "getprinter", (PyCFunction)spoolss_getprinter, 
+       { "getprinter", (PyCFunction)spoolss_hnd_getprinter, 
            METH_VARARGS | METH_KEYWORDS,
-         "getprinter([level]) -> dict
-
-Return a dictionary of print information.  The info level defaults to 1.
-
-Example:
-
->>> hnd.getprinter()
-{'comment': 'i am a comment', 'printer_name': '\\\\NPSD-PDC2\\meanie', 
- 'description': '\\\\NPSD-PDC2\\meanie,Generic / Text Only,i am a location',
- 'flags': 8388608}
-"},
-
-       { "setprinter", (PyCFunction)spoolss_setprinter, 
+         "Get printer information.\n"
+"\n"
+"Return a dictionary of print information.  The info level defaults to 1.\n"
+"\n"
+"Example:\n"
+"\n"
+">>> hnd.getprinter()\n"
+"{'comment': 'i am a comment', 'printer_name': '\\\\NPSD-PDC2\\meanie',\n"
+" 'description': '\\\\NPSD-PDC2\\meanie,Generic / Text Only,i am a location',\n"
+" 'flags': 8388608}"},
+
+       { "setprinter", (PyCFunction)spoolss_hnd_setprinter, 
           METH_VARARGS | METH_KEYWORDS,
-         "setprinter(dict) -> None
-
-Set printer information.
-"},
+         "Set printer information."},
 
        /* Printer drivers */
 
-       { "getprinterdriver", (PyCFunction)spoolss_getprinterdriver, 
+       { "getprinterdriver", (PyCFunction)spoolss_hnd_getprinterdriver, 
          METH_VARARGS | METH_KEYWORDS, 
-         "getprinterdriver([level = 1, arch = \"Windows NT x86\"] -> dict
-
-Return a dictionary of printer driver information.
-"},
+         "Return printer driver information.\n"
+"\n"
+"Return a dictionary of printer driver information for the printer driver\n"
+"bound to this printer."},
 
        /* Forms */
 
-       { "enumforms", (PyCFunction)spoolss_enumforms, 
+       { "enumforms", (PyCFunction)spoolss_hnd_enumforms, 
           METH_VARARGS | METH_KEYWORDS,
-         "enumforms([level = 1]) -> list
-
-Return a list of forms supported by a printer.
-"},
+         "Enumerate supported forms.\n"
+"\n"
+"Return a list of forms supported by this printer or print server."},
 
-       { "setform", (PyCFunction)spoolss_setform, 
+       { "setform", (PyCFunction)spoolss_hnd_setform, 
           METH_VARARGS | METH_KEYWORDS,
-         "setform(dict) -> None
+         "Set form data.\n"
+"\n"
+"Set the form given by the dictionary argument."},
 
-Set the form given by the dictionary argument.
-"},
-
-       { "addform", (PyCFunction)spoolss_addform, 
+       { "addform", (PyCFunction)spoolss_hnd_addform, 
           METH_VARARGS | METH_KEYWORDS,
-         "Insert a form" },
+         "Add a new form." },
 
-       { "getform", (PyCFunction)spoolss_getform, 
+       { "getform", (PyCFunction)spoolss_hnd_getform, 
           METH_VARARGS | METH_KEYWORDS,
-         "Fetch form properties" },
+         "Get form properties." },
 
-       { "deleteform", (PyCFunction)spoolss_deleteform, 
+       { "deleteform", (PyCFunction)spoolss_hnd_deleteform, 
           METH_VARARGS | METH_KEYWORDS,
-         "Delete a form" },
+         "Delete a form." },
 
         /* Job related methods */
 
-        { "enumjobs", (PyCFunction)spoolss_enumjobs, 
+        { "enumjobs", (PyCFunction)spoolss_hnd_enumjobs, 
           METH_VARARGS | METH_KEYWORDS,
-          "Enumerate jobs" },
+          "Enumerate jobs." },
 
-        { "setjob", (PyCFunction)spoolss_setjob, 
+        { "setjob", (PyCFunction)spoolss_hnd_setjob, 
           METH_VARARGS | METH_KEYWORDS,
-          "Set job information" },
+          "Set job information." },
 
-        { "getjob", (PyCFunction)spoolss_getjob, 
+        { "getjob", (PyCFunction)spoolss_hnd_getjob, 
           METH_VARARGS | METH_KEYWORDS,
-          "Get job information" },
+          "Get job information." },
 
-        { "startpageprinter", (PyCFunction)spoolss_startpageprinter, 
+        { "startpageprinter", (PyCFunction)spoolss_hnd_startpageprinter, 
            METH_VARARGS | METH_KEYWORDS,
           "Notify spooler that a page is about to be printed." },
 
-        { "endpageprinter", (PyCFunction)spoolss_endpageprinter, 
+        { "endpageprinter", (PyCFunction)spoolss_hnd_endpageprinter, 
            METH_VARARGS | METH_KEYWORDS,
           "Notify spooler that a page is about to be printed." },
 
-        { "startdocprinter", (PyCFunction)spoolss_startdocprinter, 
+        { "startdocprinter", (PyCFunction)spoolss_hnd_startdocprinter, 
            METH_VARARGS | METH_KEYWORDS,
           "Notify spooler that a document is about to be printed." },
 
-        { "enddocprinter", (PyCFunction)spoolss_enddocprinter, 
+        { "enddocprinter", (PyCFunction)spoolss_hnd_enddocprinter, 
            METH_VARARGS | METH_KEYWORDS,
           "Notify spooler that a document is about to be printed." },
 
-        { "writeprinter", (PyCFunction)spoolss_writeprinter,
+        { "writeprinter", (PyCFunction)spoolss_hnd_writeprinter,
           METH_VARARGS | METH_KEYWORDS,
           "Write job data to a printer." },
 
+        { "addjob", (PyCFunction)spoolss_hnd_addjob,
+          METH_VARARGS | METH_KEYWORDS,
+          "Add a job to the list of print jobs." },
+
         /* Printer data */
 
-        { "getprinterdata", (PyCFunction)spoolss_getprinterdata,
+        { "getprinterdata", (PyCFunction)spoolss_hnd_getprinterdata,
+           METH_VARARGS | METH_KEYWORDS,
+          "Get printer data." },
+
+        { "setprinterdata", (PyCFunction)spoolss_hnd_setprinterdata,
+           METH_VARARGS | METH_KEYWORDS,
+          "Set printer data." },
+
+        { "enumprinterdata", (PyCFunction)spoolss_hnd_enumprinterdata,
+           METH_VARARGS | METH_KEYWORDS,
+          "Enumerate printer data." },
+
+        { "deleteprinterdata", (PyCFunction)spoolss_hnd_deleteprinterdata,
+           METH_VARARGS | METH_KEYWORDS,
+          "Delete printer data." },
+
+        { "getprinterdataex", (PyCFunction)spoolss_hnd_getprinterdataex,
            METH_VARARGS | METH_KEYWORDS,
           "Get printer data." },
 
-        { "setprinterdata", (PyCFunction)spoolss_setprinterdata,
+        { "setprinterdataex", (PyCFunction)spoolss_hnd_setprinterdataex,
            METH_VARARGS | METH_KEYWORDS,
           "Set printer data." },
 
-        { "enumprinterdata", (PyCFunction)spoolss_enumprinterdata,
+        { "enumprinterdataex", (PyCFunction)spoolss_hnd_enumprinterdataex,
            METH_VARARGS | METH_KEYWORDS,
           "Enumerate printer data." },
 
+        { "deleteprinterdataex", (PyCFunction)spoolss_hnd_deleteprinterdataex,
+           METH_VARARGS | METH_KEYWORDS,
+          "Delete printer data." },
+
+        { "enumprinterkey", (PyCFunction)spoolss_hnd_enumprinterkey,
+           METH_VARARGS | METH_KEYWORDS,
+          "Enumerate printer key." },
+
+#if 0
+        /* Not implemented */
+
+        { "deleteprinterkey", (PyCFunction)spoolss_hnd_deleteprinterkey,
+           METH_VARARGS | METH_KEYWORDS,
+          "Delete printer key." },
+#endif
+
        { NULL }
 
 };