/* Copyright (C) 2018 Causal Agent June * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . */ #include #include #include #include #include #include #include int main(int argc, char *argv[]) { if (argc < 2) errx(EX_USAGE, "missing public id"); uint32_t id[4]; char public[7 + 32 + 1]; char private[8 + 32 + 1]; arc4random_buf(id, sizeof(id)); snprintf(public, sizeof(public), "public/%s", argv[1]); snprintf( private, sizeof(private), "private/%08x%08x%08x%08x", id[0], id[1], id[2], id[3] ); int fd = open(public, O_CREAT | O_EXCL, 0644); if (fd < 0) err(EX_CANTCREAT, "%s", public); snprintf(public, sizeof(public), "../public/%s", argv[1]); int error = symlink(public, private); if (error) err(EX_CANTCREAT, "%s", private); printf("%08x%08x%08x%08x\n", id[0], id[1], id[2], id[3]); return EX_OK; }