Index: scheduler/client.c =================================================================== --- scheduler/client.c (revision 10942) +++ scheduler/client.c (working copy) @@ -1302,7 +1302,8 @@ { case HTTP_STATE_GET_SEND : if ((!strncmp(con->uri, "/ppd/", 5) || - !strncmp(con->uri, "/printers/", 10)) && + !strncmp(con->uri, "/printers/", 10) || + !strncmp(con->uri, "/classes/", 9)) && !strcmp(con->uri + strlen(con->uri) - 4, ".ppd")) { /* @@ -1314,9 +1315,37 @@ if (!strncmp(con->uri, "/ppd/", 5)) p = cupsdFindPrinter(con->uri + 5); + else if (!strncmp(con->uri, "/printers/", 10)) + p = cupsdFindPrinter(con->uri + 10); else - p = cupsdFindPrinter(con->uri + 10); + { + p = cupsdFindClass(con->uri + 9); + if (p) + { + int i; /* Looping var */ + + for (i = 0; i < p->num_printers; i ++) + { + if (!(p->printers[i]->type & CUPS_PRINTER_CLASS)) + { + char ppdname[1024];/* PPD filename */ + + snprintf(ppdname, sizeof(ppdname), "%s/ppd/%s.ppd", + ServerRoot, p->printers[i]->name); + if (!access(ppdname, 0)) + { + p = p->printers[i]; + break; + } + } + } + + if (i >= p->num_printers) + p = NULL; + } + } + if (p) { snprintf(con->uri, sizeof(con->uri), "/ppd/%s.ppd", p->name); @@ -1349,8 +1378,34 @@ else if (!strncmp(con->uri, "/printers/", 10)) p = cupsdFindPrinter(con->uri + 10); else - p = cupsdFindClass(con->uri + 9); + { + p = cupsdFindClass(con->uri + 9); + if (p) + { + int i; /* Looping var */ + + for (i = 0; i < p->num_printers; i ++) + { + if (!(p->printers[i]->type & CUPS_PRINTER_CLASS)) + { + char ppdname[1024];/* PPD filename */ + + snprintf(ppdname, sizeof(ppdname), "%s/ppd/%s.ppd", + ServerRoot, p->printers[i]->name); + if (!access(ppdname, 0)) + { + p = p->printers[i]; + break; + } + } + } + + if (i >= p->num_printers) + p = NULL; + } + } + if (p) snprintf(con->uri, sizeof(con->uri), "/icons/%s.png", p->name); else