/*
- * "$Id: snmp.c 7810 2008-07-29 01:11:15Z mike $"
+ * SNMP discovery backend for CUPS.
*
- * SNMP discovery backend for CUPS.
+ * Copyright © 2007-2014 by Apple Inc.
+ * Copyright © 2006-2007 by Easy Software Products, all rights reserved.
*
- * Copyright 2007-2012 by Apple Inc.
- * Copyright 2006-2007 by Easy Software Products, all rights reserved.
- *
- * These coded instructions, statements, and computer programs are the
- * property of Apple Inc. and are protected by Federal copyright
- * law. Distribution and use rights are outlined in the file "LICENSE.txt"
- * "LICENSE" which should have been included with this file. If this
- * file is missing or damaged, see the license at "http://www.cups.org/".
- *
- * This file is subject to the Apple OS-Developed Software exception.
- *
- * Contents:
- *
- * main() - Discover printers via SNMP.
- * add_array() - Add a string to an array.
- * add_cache() - Add a cached device...
- * add_device_uri() - Add a device URI to the cache.
- * alarm_handler() - Handle alarm signals...
- * compare_cache() - Compare two cache entries.
- * debug_printf() - Display some debugging information.
- * fix_make_model() - Fix common problems in the make-and-model
- * string.
- * free_array() - Free an array of strings.
- * free_cache() - Free the array of cached devices.
- * get_interface_addresses() - Get the broadcast address(es) associated with
- * an interface.
- * list_device() - List a device we found...
- * password_cb() - Handle authentication requests.
- * probe_device() - Probe a device to discover whether it is a
- * printer.
- * read_snmp_conf() - Read the snmp.conf file.
- * read_snmp_response() - Read and parse a SNMP response...
- * run_time() - Return the total running time...
- * scan_devices() - Scan for devices using SNMP.
- * try_connect() - Try connecting on a port...
- * update_cache() - Update a cached device...
+ * Licensed under Apache License v2.0. See the file "LICENSE" for more
+ * information.
*/
/*
static const int LexmarkProductOID[] = { 1,3,6,1,4,1,641,2,1,2,1,2,1,-1 };
static const int LexmarkProductOID2[] = { 1,3,6,1,4,1,674,10898,100,2,1,2,1,2,1,-1 };
static const int LexmarkDeviceIdOID[] = { 1,3,6,1,4,1,641,2,1,2,1,3,1,-1 };
+static const int HPDeviceIdOID[] = { 1,3,6,1,4,1,11,2,3,9,1,1,7,0,-1 };
+static const int RicohDeviceIdOID[] = { 1,3,6,1,4,1,367,3,2,1,1,1,11,0,-1 };
static const int XeroxProductOID[] = { 1,3,6,1,4,1,128,2,1,3,1,2,0,-1 };
static cups_array_t *DeviceURIs = NULL;
static int HostNameLookups = 0;
#ifdef AF_INET6
if ((ipv6 = _cupsSNMPOpen(AF_INET6)) < 0)
- return (1);
+ perror("DEBUG: Unable to create IPv6 socket");
#else
ipv6 = -1;
#endif /* AF_INET6 */
#endif /* !HAVE_SIGSET && !HAVE_SIGACTION */
if (DebugLevel)
- write(2, "DEBUG: ALARM!\n", 14);
+ backendMessage("DEBUG: ALARM!\n");
}
make_model[0] = 'H';
make_model[1] = 'P';
make_model[2] = ' ';
- strlcpy(make_model + 3, mmptr, make_model_size - 3);
+ strlcpy(make_model + 3, mmptr, (size_t)make_model_size - 3);
}
else if (!_cups_strncasecmp(old_make_model, "deskjet", 7))
- snprintf(make_model, make_model_size, "HP DeskJet%s", old_make_model + 7);
+ snprintf(make_model, (size_t)make_model_size, "HP DeskJet%s", old_make_model + 7);
else if (!_cups_strncasecmp(old_make_model, "officejet", 9))
- snprintf(make_model, make_model_size, "HP OfficeJet%s", old_make_model + 9);
+ snprintf(make_model, (size_t)make_model_size, "HP OfficeJet%s", old_make_model + 9);
else if (!_cups_strncasecmp(old_make_model, "stylus_pro_", 11))
- snprintf(make_model, make_model_size, "EPSON Stylus Pro %s",
- old_make_model + 11);
+ snprintf(make_model, (size_t)make_model_size, "EPSON Stylus Pro %s", old_make_model + 11);
else
- strlcpy(make_model, old_make_model, make_model_size);
+ strlcpy(make_model, old_make_model, (size_t)make_model_size);
if ((mmptr = strstr(make_model, ", Inc.,")) != NULL)
{
* Insert hostname/address...
*/
- strlcpy(uriptr, device->addrname, sizeof(uri) - (uriptr - uri));
+ strlcpy(uriptr, device->addrname, sizeof(uri) - (size_t)(uriptr - uri));
uriptr += strlen(uriptr);
format += 2;
}
_cupsSNMPWrite(fd, &(packet.address), CUPS_SNMP_VERSION_1,
packet.community, CUPS_ASN1_GET_REQUEST,
DEVICE_ID, LexmarkDeviceIdOID);
+ _cupsSNMPWrite(fd, &(packet.address), CUPS_SNMP_VERSION_1,
+ packet.community, CUPS_ASN1_GET_REQUEST,
+ DEVICE_ID, RicohDeviceIdOID);
_cupsSNMPWrite(fd, &(packet.address), CUPS_SNMP_VERSION_1,
packet.community, CUPS_ASN1_GET_REQUEST,
DEVICE_PRODUCT, XeroxProductOID);
+ _cupsSNMPWrite(fd, &(packet.address), CUPS_SNMP_VERSION_1,
+ packet.community, CUPS_ASN1_GET_REQUEST,
+ DEVICE_ID, HPDeviceIdOID);
break;
case DEVICE_DESCRIPTION :
* Description is the IEEE-1284 device ID...
*/
+ char *ptr; /* Pointer into device ID */
+
+ for (ptr = (char *)packet.object_value.string.bytes; *ptr; ptr ++)
+ if (*ptr == '\n')
+ *ptr = ';'; /* A lot of bad printers put a newline */
if (!device->id)
device->id = strdup((char *)packet.object_value.string.bytes);
*/
char make_model[256]; /* Make and model */
+ char *ptr; /* Pointer into device ID */
-
+ for (ptr = (char *)packet.object_value.string.bytes; *ptr; ptr ++)
+ if (*ptr == '\n')
+ *ptr = ';'; /* A lot of bad printers put a newline */
if (device->id)
free(device->id);
for (addr = addrs; addr; addr = addr->next)
{
#ifdef AF_INET6
- if (_httpAddrFamily(&(addr->addr)) == AF_INET6)
+ if (httpAddrFamily(&(addr->addr)) == AF_INET6)
fd = ipv6;
else
#endif /* AF_INET6 */
debug_printf("DEBUG: %.3f Trying %s://%s:%d...\n", run_time(),
port == 515 ? "lpd" : "socket", addrname, port);
- if ((fd = socket(_httpAddrFamily(addr), SOCK_STREAM, 0)) < 0)
+ if ((fd = socket(httpAddrFamily(addr), SOCK_STREAM, 0)) < 0)
{
fprintf(stderr, "ERROR: Unable to create socket: %s\n",
strerror(errno));
alarm(1);
- status = connect(fd, (void *)addr, httpAddrLength(addr));
+ status = connect(fd, (void *)addr, (socklen_t)httpAddrLength(addr));
close(fd);
alarm(0);
list_device(device);
}
-
-
-/*
- * End of "$Id: snmp.c 7810 2008-07-29 01:11:15Z mike $".
- */