int value, id, ssaddr, smask, shigh, slow, cnt;
unsigned int saddr, mask, high, low;
EXEC SQL END DECLARE SECTION;
- int row;
+ int row, idx;
struct in_addr addr;
id = *(int *)argv[0];
else
row = 0;
+ if (q->version < 6)
+ idx = 0;
+ else
+ idx = 1;
+
/* Sanity check name, vendor, model, and os. */
if ((row == 0 || strcasecmp(argv[1], oldname)) &&
!hostname_check(argv[row]))
return MR_EXISTS;
/* check address */
- if (!strcmp(argv[9 + row], "unassigned"))
+ if (!strcmp(argv[9 + row + idx], "unassigned"))
value = -1;
- else if (!strcmp(argv[9 + row], "unique"))
+ else if (!strcmp(argv[9 + row + idx], "unique"))
{
- if (*(int *)argv[8 + row] == 0)
+ if (*(int *)argv[8 + row + idx] == 0)
value = -1;
else
value = -2;
}
else
{
- value = ntohl(inet_addr(argv[9 + row]));
+ value = ntohl(inet_addr(argv[9 + row + idx]));
if (value == -1)
return MR_ADDRESS;
}
/*
* an address or unique was specified.
*/
- id = *(int *)argv[8 + row];
+ id = *(int *)argv[8 + row + idx];
EXEC SQL SELECT saddr, mask, high, low INTO :ssaddr, :smask,
:shigh, :slow FROM subnet WHERE snet_id = :id;
if (dbms_errno)
* link in an inet_addr() that returns an error for
* this case.
*/
- addr.s_addr = inet_addr(argv[9 + row]);
+ addr.s_addr = inet_addr(argv[9 + row + idx]);
name = inet_ntoa(addr);
EXEC SQL SELECT count(mach_id) INTO :cnt FROM machine
WHERE address = :name;
* we have an address in value. Convert it to a string and store it.
*/
addr.s_addr = htonl(value);
- strcpy(argv[9 + row], inet_ntoa(addr));
+ strcpy(argv[9 + row + idx], inet_ntoa(addr));
}
else
- strcpy(argv[9 + row], "unassigned");
+ strcpy(argv[9 + row + idx], "unassigned");
/* status checking */
- value = atoi(argv[7 + row]);
+ value = atoi(argv[7 + row + idx]);
if (row == 0 && !(value == 1 || value == 0))
return MR_TYPE;
if (row == 1)