Update README to say GPLv2 or later and remove references to bzr.
[jerry/slag.git] / win32 / spoolss / SetPrinter.c
1 /******************************************************************\r
2  * SPOOLSS regression testing code for Samba print servers\r
3  * \r
4  *****************************************************************/\r
5 \r
6 #include <windows.h>\r
7 #include <stdio.h>\r
8 #include "printlib.h"\r
9 \r
10 /* we will excercise info level 2 (cange the drivername)\r
11    and info level 3 (security descriptor) */\r
12 int main (int argc, char* argv[])\r
13 {\r
14         DWORD   needed;\r
15         HANDLE  printer;\r
16         PPRINTER_INFO_2 buffer2 = NULL;\r
17         PRINTER_INFO_3  buffer3;\r
18         \r
19         if (argc < 3)\r
20         {\r
21                 fprintf (stderr, "useage: %s <printername> <drivername>\n", argv[0]);\r
22                 exit (-1);\r
23         }\r
24 \r
25         /* open the printer */\r
26         if (!OpenPrinter (argv[1], &printer, NULL))\r
27         {\r
28                 fprintf (stderr, "Unable to open %s!\n", argv[1]);\r
29                 exit (-1);\r
30         }\r
31         else\r
32         {\r
33                 printf ("Printer [%s] opened successfully.\n\n", argv[1]);\r
34         }\r
35 \r
36         /* INFO LEVEL 2 */\r
37         GetPrinter(printer, 2, (LPBYTE)buffer2, 0, &needed);\r
38         if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)\r
39         {\r
40                 if (needed != 0)\r
41                         fprintf (stderr, "Error GetPrinter Info Level 2 for [%s] using NULL buffer.\n", argv[1]);\r
42                 else\r
43                         printf ("Info level 2 returned no information\n");\r
44         }\r
45         else\r
46         {\r
47                 if ((buffer2 = (LPBYTE)malloc(needed)) == NULL)\r
48                 {\r
49                         fprintf (stderr, "Unable to malloc memory for buffer!\n");\r
50                         exit (-1);\r
51                 }\r
52                 if (!GetPrinter(printer, 2, (LPBYTE)buffer2, needed, &needed))\r
53                 {\r
54                         fprintf (stderr, "Error getting printers Info Level 2 for [%s].\nSize of buffer = %d\n", \r
55                                         argv[1], needed);\r
56                 }\r
57 \r
58                 printf ("Printer Info Level 2:\n");\r
59                 print_printer_info_2(buffer2);\r
60                 printf ("\n");\r
61         }\r
62 \r
63         /* set the new drivername */\r
64         buffer2->pDriverName = strdup (argv[2]);\r
65         if (SetPrinter(printer, 2, (LPBYTE)buffer2, 0))\r
66         {\r
67                 printf ("Printer driver successfully changed to [%s]\n", argv[2]);\r
68                 printf ("Printer Info 2 :\n");\r
69                 print_printer_info_2 (buffer2);\r
70                 printf ("\n");\r
71         }\r
72         else\r
73                 PrintLastError();\r
74 \r
75         /* exercise the various command options */\r
76         printf ("command = PRINTER_CONTROL_PAUSE\n");\r
77         if (SetPrinter (printer, 2, (LPBYTE)buffer2, PRINTER_CONTROL_PAUSE))\r
78                 printf ("Printer successfully paused.\n");\r
79         else\r
80                 PrintLastError();\r
81         printf ("\n");\r
82 \r
83         printf ("command = PRINTER_CONTROL_RESUME\n");\r
84         if (SetPrinter (printer, 2, (LPBYTE)buffer2, PRINTER_CONTROL_RESUME))\r
85                 printf ("Printer successfully paused.\n");\r
86         else\r
87                 PrintLastError();\r
88         printf ("\n");\r
89 \r
90         printf ("command = PRINTER_CONTROL_PURGE\n");\r
91         if (SetPrinter (printer, 2, (LPBYTE)buffer2, PRINTER_CONTROL_PURGE))\r
92                 printf ("Printer successfully paused.\n");\r
93         else\r
94                 PrintLastError();\r
95         printf ("\n");\r
96 \r
97 \r
98         /* we'll just use the security descriptor from the buffer2 */\r
99         printf ("Testing setting of security descriptor using PRINTER_INFO_3...\n");\r
100         buffer3.pSecurityDescriptor = buffer2->pSecurityDescriptor;\r
101 \r
102         printf ("Current security descriptor settings for [%s]:\n", argv[1]);\r
103         /* print_secdesc (buffer3.pSecurityDescriptor); */\r
104         printf ("\n");\r
105 \r
106         printf ("no changes to security descriptor...\n\n");\r
107 \r
108 \r
109         if (SetPrinter (printer, 3, (LPBYTE)&buffer3, 0))\r
110         {\r
111                 printf ("Printer descriptor information updated successfully.\n");\r
112                 printf ("New security descriptor settings for [%s]:\n", argv[1]);\r
113                 /* print_secdesc (buffer3.pSecurityDescriptor); */\r
114                 printf ("\n");\r
115         }\r
116         else\r
117                 PrintLastError();\r
118         printf ("\n");\r
119 \r
120         /* close the printer */\r
121         if (!ClosePrinter(printer))\r
122         {\r
123                 fprintf (stderr, "Error closing printer!\n");\r
124                 exit (-1);\r
125         }\r
126         else\r
127         {\r
128                 printf ("Printer [%s] closed successfully.\n", argv[1]);\r
129         }\r
130 \r
131         return 0;\r
132 \r
133 }\r
134 \r