testprogs: print all printerinfo levels in spoolss test.
[ira/wip.git] / testprogs / win32 / spoolss / printlib.c
index ff185170fc523501ea9e719de0604cc21ecdd9cc..a41a5c1c9041cd06b934dfe5ce4ba37329979227 100644 (file)
@@ -22,6 +22,7 @@
 #include <windows.h>
 #include <stdio.h>
 #include <assert.h>
+#include <sddl.h>
 
 void print_devmode(DEVMODE *pDevModeIn)
 {
@@ -125,24 +126,27 @@ void print_acl(const char* str, ACL *acl)
        return;
 }
 
-void print_sid(const char* str, SID *sid)
+void PrintLastError();
+
+void print_sid(LPSTR str, PSID sid)
 {
-       DWORD   i = 0;
+       LPSTR sid_string;
 
        printf("%s\n", str);
-       printf("0x%x\n", sid);
-       if (sid == NULL)
+
+       if (sid == NULL) {
+               printf("(null sid)\n");
+               return;
+       }
+
+       if (!ConvertSidToStringSid(sid, &sid_string)) {
+               PrintLastError();
                return;
-       printf("\t\tRevision\t\t0x%x\n", sid->Revision);
-       printf("\t\tSubAuthorityCount\t0x%x\n", sid->SubAuthorityCount);
-       printf("\t\tSubAuthority\n\t");
-       while (i < sid->SubAuthorityCount) {
-               printf("\t0x%x", sid->SubAuthority[i]);
-               if (i%4 == 3)
-                       printf("\n\t");
-               i++;
        }
 
+       printf("%s\n", sid_string);
+       LocalFree(sid_string);
+
        return;
 }
 
@@ -155,6 +159,7 @@ void print_secdesc(SECURITY_DESCRIPTOR *secdesc)
 
        printf("\tRevision\t= 0x%x\n", secdesc->Revision);
        printf("\tSbz1\t\t= 0x%x\n", secdesc->Sbz1);
+       printf("\tControl\t\t= 0x%x\n", secdesc->Control);
 #if 0
        print_sid("\tOwner\t\t= ", secdesc->Owner);
        print_sid("\tGroup\t\t= ",secdesc->Group);
@@ -583,11 +588,25 @@ void print_printer_info_2(PPRINTER_INFO_2 info)
        printf("\tDevice Mode Information\n");
        printf("\t-----------------------\n");
        print_devmode(info->pDevMode);
-#if 0
        printf("\tSecurity Descriptor Information\n");
        printf("\t-------------------------------\n");
        print_secdesc(info->pSecurityDescriptor);
-#endif
+       return;
+}
+
+void print_printer_info_3(PPRINTER_INFO_3 info)
+{
+       printf("\tSecurity Descriptor Information\n");
+       printf("\t-------------------------------\n");
+       print_secdesc(info->pSecurityDescriptor);
+       return;
+}
+
+void print_printer_info_4(PPRINTER_INFO_4 info)
+{
+       printf("\tServer Name\t\t= %s\n",       info->pServerName);
+       printf("\tPrinter Name\t\t= %s\n",      info->pPrinterName);
+       printf("\tAttributes\t\t= 0x%x\n",      info->Attributes);
        return;
 }
 
@@ -635,6 +654,7 @@ void print_printer_info_bylevel(DWORD level, LPBYTE buffer, DWORD count)
        PPRINTER_INFO_6 buffer6 = NULL;
        PPRINTER_INFO_7 buffer7 = NULL;
        PPRINTER_INFO_8 buffer8 = NULL;
+       PPRINTER_INFO_9 buffer9 = NULL;
 
        if (!buffer) {
                return;
@@ -665,6 +685,9 @@ void print_printer_info_bylevel(DWORD level, LPBYTE buffer, DWORD count)
        case 8:
                buffer8 = (PPRINTER_INFO_8)buffer;
                break;
+       case 9:
+               buffer9 = (PPRINTER_INFO_9)buffer;
+               break;
        default:
                break;
        }
@@ -684,7 +707,6 @@ void print_printer_info_bylevel(DWORD level, LPBYTE buffer, DWORD count)
                        printf("\n");
                }
                break;
-#if 0
        case 3:
                for (i=0; i<count; i++) {
                        print_printer_info_3(&buffer3[i]);
@@ -697,7 +719,6 @@ void print_printer_info_bylevel(DWORD level, LPBYTE buffer, DWORD count)
                        printf("\n");
                }
                break;
-#endif
        case 5:
                for (i=0; i<count; i++) {
                        print_printer_info_5(&buffer5[i]);
@@ -722,6 +743,12 @@ void print_printer_info_bylevel(DWORD level, LPBYTE buffer, DWORD count)
                        printf("\n");
                }
                break;
+       case 9:
+               for (i=0; i<count; i++) {
+                       print_printer_info_9(&buffer9[i]);
+                       printf("\n");
+               }
+               break;
        default:
                break;
        }