namefield = vo->namefield;
idfield = vo->idfield;
- if ((tbl == USERS_TABLE && !strcmp(namefield, "login")) ||
- tbl == MACHINE_TABLE || tbl == SUBNET_TABLE || tbl == FILESYS_TABLE ||
- tbl == LIST_TABLE || tbl == CLUSTERS_TABLE || tbl == STRINGS_TABLE)
+ if (tbl == MACHINE_TABLE || tbl == SUBNET_TABLE)
{
- if (tbl == MACHINE_TABLE || tbl == SUBNET_TABLE)
- {
- for (c = name; *c; c++)
- {
- if (islower(*c))
- *c = toupper(*c);
- }
- }
- status = name_to_id(name, tbl, &id);
- if (status == 0)
- {
- *(int *)argv[vo->index] = id;
- return MR_EXISTS;
- }
- else if (status == MR_NO_MATCH && tbl == STRINGS_TABLE &&
- (q->type == APPEND || q->type == UPDATE))
+ for (c = name; *c; c++)
{
- id = add_string(name);
- cache_entry(name, STRINGS_TABLE, id);
- *(int *)argv[vo->index] = id;
- return MR_EXISTS;
+ if (islower(*c))
+ *c = toupper(*c);
}
- else if (status == MR_NO_MATCH || status == MR_NOT_UNIQUE)
- return vo->error;
- else
- return status;
}
- else
+ status = name_to_id(name, tbl, &id);
+ if (status == 0)
{
- /* else, it's `dubu', which uses unix_uid from users */
- EXEC SQL SELECT COUNT(*) INTO :rowcount FROM users
- WHERE unix_uid = :name;
- if (dbms_errno)
- return mr_errcode;
- if (rowcount != 1)
- return vo->error;
- EXEC SQL SELECT users_id INTO :id FROM users
- WHERE unix_uid = :name;
*(int *)argv[vo->index] = id;
return MR_EXISTS;
}
+ else if (status == MR_NO_MATCH && tbl == STRINGS_TABLE &&
+ (q->type == APPEND || q->type == UPDATE))
+ {
+ if (strlen(name) >= STRINGS_STRING_SIZE)
+ return MR_ARG_TOO_LONG;
+ id = add_string(name);
+ cache_entry(name, STRINGS_TABLE, id);
+ *(int *)argv[vo->index] = id;
+ return MR_EXISTS;
+ }
+ else if (status == MR_NO_MATCH || status == MR_NOT_UNIQUE)
+ return vo->error;
+ else
+ return status;
}
int validate_name(char *argv[], struct valobj *vo)
{
if (q->type != APPEND && q->type != UPDATE)
return MR_STRING;
+ if (strlen(name) >= STRINGS_STRING_SIZE)
+ return MR_ARG_TOO_LONG;
id = add_string(name);
cache_entry(name, STRINGS_TABLE, id);
}
if (*p == '-')
p++;
+ if (!*p)
+ return MR_INTEGER;
+
for (; *p; p++)
{
if (*p < '0' || *p > '9')