+ _cupsLangPuts(logfile, message);
+
+ unlink(authfile);
+
+ return (0);
+ }
+ }
+
+ /*
+ * See if we have the 64-bit Windows PS driver...
+ *
+ * Files:
+ *
+ * x64/ps5ui.dll
+ * x64/pscript.hlp
+ * x64/pscript.ntf
+ * x64/pscript5.dll
+ */
+
+ snprintf(file, sizeof(file), "%s/drivers/x64/pscript5.dll", cg->cups_datadir);
+ if (!access(file, 0))
+ {
+ have_drivers |= 4;
+
+ /*
+ * 64-bit Windows driver is installed; do the smbclient commands needed
+ * to copy the Win64 drivers over...
+ */
+
+ snprintf(address, sizeof(address), "//%s/print$", samba_server);
+
+ snprintf(subcmd, sizeof(subcmd),
+ "mkdir x64;"
+ "put %s x64/%s.ppd;"
+ "put %s/drivers/x64/ps5ui.dll x64/ps5ui.dll;"
+ "put %s/drivers/x64/pscript.hlp x64/pscript.hlp;"
+ "put %s/drivers/x64/pscript.ntf x64/pscript.ntf;"
+ "put %s/drivers/x64/pscript5.dll x64/pscript5.dll",
+ ppd, dest, cg->cups_datadir, cg->cups_datadir,
+ cg->cups_datadir, cg->cups_datadir);
+
+ if ((status = do_samba_command("smbclient", address, subcmd,
+ authfile, logfile)) != 0)
+ {
+ snprintf(message, sizeof(message),
+ _cupsLangString(language,
+ _("Unable to copy 64-bit Windows printer "
+ "driver files (%d).")), status);
+
+ _cupsSetError(IPP_STATUS_ERROR_INTERNAL, message, 0);
+
+ if (logfile)
+ _cupsLangPuts(logfile, message);
+
+ unlink(authfile);
+
+ return (0);
+ }
+
+ /*
+ * See if we also have the CUPS driver files; if so, use them!
+ */
+
+ snprintf(file, sizeof(file), "%s/drivers/x64/cupsps6.dll", cg->cups_datadir);
+ if (!access(file, 0))
+ {
+ /*
+ * Copy the CUPS driver files over...
+ */
+
+ snprintf(subcmd, sizeof(subcmd),
+ "put %s/drivers/x64/cups6.ini x64/cups6.ini;"
+ "put %s/drivers/x64/cupsps6.dll x64/cupsps6.dll;"
+ "put %s/drivers/x64/cupsui6.dll x64/cupsui6.dll",
+ cg->cups_datadir, cg->cups_datadir, cg->cups_datadir);
+
+ if ((status = do_samba_command("smbclient", address, subcmd,
+ authfile, logfile)) != 0)
+ {
+ snprintf(message, sizeof(message),
+ _cupsLangString(language,
+ _("Unable to copy 64-bit CUPS printer driver "
+ "files (%d).")), status);
+
+ _cupsSetError(IPP_STATUS_ERROR_INTERNAL, message, 0);
+
+ if (logfile)
+ _cupsLangPuts(logfile, message);
+
+ unlink(authfile);
+
+ return (0);
+ }
+
+ /*
+ * Do the rpcclient command needed for the CUPS drivers...
+ */
+
+ snprintf(subcmd, sizeof(subcmd),
+ "adddriver \"Windows x64\" \"%s:"
+ "pscript5.dll:%s.ppd:ps5ui.dll:pscript.hlp:NULL:RAW:"
+ "pscript5.dll,%s.ppd,ps5ui.dll,pscript.hlp,pscript.ntf,"
+ "cups6.ini,cupsps6.dll,cupsui6.dll\"",
+ dest, dest, dest);
+ }
+ else
+ {
+ /*
+ * Don't have the CUPS drivers, so just use the standard Windows
+ * drivers...
+ */
+
+ snprintf(subcmd, sizeof(subcmd),
+ "adddriver \"Windows x64\" \"%s:"
+ "pscript5.dll:%s.ppd:ps5ui.dll:pscript.hlp:NULL:RAW:"
+ "pscript5.dll,%s.ppd,ps5ui.dll,pscript.hlp,pscript.ntf\"",
+ dest, dest, dest);
+ }
+
+ if ((status = do_samba_command("rpcclient", samba_server, subcmd,
+ authfile, logfile)) != 0)
+ {
+ snprintf(message, sizeof(message),
+ _cupsLangString(language,
+ _("Unable to install Windows 2000 printer "
+ "driver files (%d).")), status);
+
+ _cupsSetError(IPP_STATUS_ERROR_INTERNAL, message, 0);
+
+ if (logfile)
+ _cupsLangPuts(logfile, message);