/* * Copyright (c) 2007-2008 Hypertriton, Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE * USE OF THIS SOFTWARE EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include #include #include #include "machctld.h" #include #include #include static void printusage(void) { extern char *__progname; printf("Usage: %s [-v] [-u username] [-p password] [-e email]\n", __progname); } int main(int argc, char *argv[]) { extern const AG_ObjectOps UserOps; char *username = NULL, *password = NULL, *email = NULL; User *u; int i; if (AG_InitCore("machctld", 0) == -1) { fprintf(stderr, "%s\n", AG_GetError()); return (1); } while ((i = getopt(argc, argv, "u:p:e:v?")) != -1) { switch (i) { case 'u': username = optarg; break; case 'p': password = optarg; break; case 'e': email = optarg; break; case 'v': printf("machctl %s\n", VERSION); exit(0); case '?': default: printusage(); exit(0); } } if (username == NULL || password == NULL || email == NULL) { printusage(); goto fail; } AG_RegisterClass(&mcUserClass); AG_ObjectLoad(agWorld); #if 0 AGOBJECT_FOREACH_CLASS(u, agWorld, user, "MC_User:*") AG_ObjectPageIn(u); #endif if (UserLookup(username) != NULL) { fprintf(stderr, "%s: user exists\n", username); goto fail; } u = Malloc(sizeof(User), M_OBJECT); UserInit(u, username); AGOBJECT(u)->flags |= AG_OBJECT_RESIDENT; strlcpy(u->name, username, sizeof(u->name)); strlcpy(u->pass, password, sizeof(u->pass)); strlcpy(u->email, email, sizeof(u->email)); UserLink(u); if (AG_ObjectSaveAll(agWorld) == -1) { fprintf(stderr, "Error saving state: %s\n", AG_GetError()); goto fail; } AG_Destroy(); return (0); fail: AG_Destroy(); return (1); }