/*
* EDIT THIS FILE WITH CAUTION (ntp-keygen-opts.c)
*
- * It has been AutoGen-ed September 29, 2011 at 08:06:17 AM by AutoGen 5.12
+ * It has been AutoGen-ed October 2, 2011 at 07:26:43 PM by AutoGen 5.12
* From the definitions ntp-keygen-opts.def
* and the template file options
*
#define zCertificate_Name NULL
#endif /* AUTOKEY */
+/*
+ * Cipher option description:
+ */
+#ifdef AUTOKEY
+static char const zCipherText[] =
+ "privatekey cipher";
+static char const zCipher_NAME[] = "CIPHER";
+static char const zCipher_Name[] = "cipher";
+#define CIPHER_FLAGS (OPTST_DISABLED \
+ | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))
+
+#else /* disable Cipher */
+#define CIPHER_FLAGS (OPTST_OMITTED | OPTST_NO_INIT)
+#define zCipher_NAME NULL
+#define zCipherText NULL
+#define zCipher_Name NULL
+#endif /* AUTOKEY */
+
/*
* Debug_Level option description:
*/
/* desc, NAME, name */ zCertificateText, zCertificate_NAME, zCertificate_Name,
/* disablement strs */ NULL, NULL },
- { /* entry idx, value */ 1, VALUE_OPT_DEBUG_LEVEL,
- /* equiv idx, value */ 1, VALUE_OPT_DEBUG_LEVEL,
+ { /* entry idx, value */ 1, VALUE_OPT_CIPHER,
+ /* equiv idx, value */ 1, VALUE_OPT_CIPHER,
+ /* equivalenced to */ NO_EQUIVALENT,
+ /* min, max, act ct */ 0, 1, 0,
+ /* opt state flags */ CIPHER_FLAGS, 0,
+ /* last opt argumnt */ { NULL },
+ /* arg list/cookie */ NULL,
+ /* must/cannot opts */ NULL, NULL,
+ /* option proc */ NULL,
+ /* desc, NAME, name */ zCipherText, zCipher_NAME, zCipher_Name,
+ /* disablement strs */ NULL, NULL },
+
+ { /* entry idx, value */ 2, VALUE_OPT_DEBUG_LEVEL,
+ /* equiv idx, value */ 2, VALUE_OPT_DEBUG_LEVEL,
/* equivalenced to */ NO_EQUIVALENT,
/* min, max, act ct */ 0, NOLIMIT, 0,
/* opt state flags */ DEBUG_LEVEL_FLAGS, 0,
/* desc, NAME, name */ zDebug_LevelText, zDebug_Level_NAME, zDebug_Level_Name,
/* disablement strs */ NULL, NULL },
- { /* entry idx, value */ 2, VALUE_OPT_SET_DEBUG_LEVEL,
- /* equiv idx, value */ 2, VALUE_OPT_SET_DEBUG_LEVEL,
+ { /* entry idx, value */ 3, VALUE_OPT_SET_DEBUG_LEVEL,
+ /* equiv idx, value */ 3, VALUE_OPT_SET_DEBUG_LEVEL,
/* equivalenced to */ NO_EQUIVALENT,
/* min, max, act ct */ 0, NOLIMIT, 0,
/* opt state flags */ SET_DEBUG_LEVEL_FLAGS, 0,
/* desc, NAME, name */ zSet_Debug_LevelText, zSet_Debug_Level_NAME, zSet_Debug_Level_Name,
/* disablement strs */ NULL, NULL },
- { /* entry idx, value */ 3, VALUE_OPT_ID_KEY,
- /* equiv idx, value */ 3, VALUE_OPT_ID_KEY,
+ { /* entry idx, value */ 4, VALUE_OPT_ID_KEY,
+ /* equiv idx, value */ 4, VALUE_OPT_ID_KEY,
/* equivalenced to */ NO_EQUIVALENT,
/* min, max, act ct */ 0, 1, 0,
/* opt state flags */ ID_KEY_FLAGS, 0,
/* desc, NAME, name */ zId_KeyText, zId_Key_NAME, zId_Key_Name,
/* disablement strs */ NULL, NULL },
- { /* entry idx, value */ 4, VALUE_OPT_GQ_PARAMS,
- /* equiv idx, value */ 4, VALUE_OPT_GQ_PARAMS,
+ { /* entry idx, value */ 5, VALUE_OPT_GQ_PARAMS,
+ /* equiv idx, value */ 5, VALUE_OPT_GQ_PARAMS,
/* equivalenced to */ NO_EQUIVALENT,
/* min, max, act ct */ 0, 1, 0,
/* opt state flags */ GQ_PARAMS_FLAGS, 0,
/* desc, NAME, name */ zGq_ParamsText, zGq_Params_NAME, zGq_Params_Name,
/* disablement strs */ NULL, NULL },
- { /* entry idx, value */ 5, VALUE_OPT_HOST_KEY,
- /* equiv idx, value */ 5, VALUE_OPT_HOST_KEY,
+ { /* entry idx, value */ 6, VALUE_OPT_HOST_KEY,
+ /* equiv idx, value */ 6, VALUE_OPT_HOST_KEY,
/* equivalenced to */ NO_EQUIVALENT,
/* min, max, act ct */ 0, 1, 0,
/* opt state flags */ HOST_KEY_FLAGS, 0,
/* desc, NAME, name */ zHost_KeyText, zHost_Key_NAME, zHost_Key_Name,
/* disablement strs */ NULL, NULL },
- { /* entry idx, value */ 6, VALUE_OPT_IFFKEY,
- /* equiv idx, value */ 6, VALUE_OPT_IFFKEY,
+ { /* entry idx, value */ 7, VALUE_OPT_IFFKEY,
+ /* equiv idx, value */ 7, VALUE_OPT_IFFKEY,
/* equivalenced to */ NO_EQUIVALENT,
/* min, max, act ct */ 0, 1, 0,
/* opt state flags */ IFFKEY_FLAGS, 0,
/* desc, NAME, name */ zIffkeyText, zIffkey_NAME, zIffkey_Name,
/* disablement strs */ NULL, NULL },
- { /* entry idx, value */ 7, VALUE_OPT_IDENT,
- /* equiv idx, value */ 7, VALUE_OPT_IDENT,
+ { /* entry idx, value */ 8, VALUE_OPT_IDENT,
+ /* equiv idx, value */ 8, VALUE_OPT_IDENT,
/* equivalenced to */ NO_EQUIVALENT,
/* min, max, act ct */ 0, 1, 0,
/* opt state flags */ IDENT_FLAGS, 0,
/* desc, NAME, name */ zIdentText, zIdent_NAME, zIdent_Name,
/* disablement strs */ NULL, NULL },
- { /* entry idx, value */ 8, VALUE_OPT_LIFETIME,
- /* equiv idx, value */ 8, VALUE_OPT_LIFETIME,
+ { /* entry idx, value */ 9, VALUE_OPT_LIFETIME,
+ /* equiv idx, value */ 9, VALUE_OPT_LIFETIME,
/* equivalenced to */ NO_EQUIVALENT,
/* min, max, act ct */ 0, 1, 0,
/* opt state flags */ LIFETIME_FLAGS, 0,
/* desc, NAME, name */ zLifetimeText, zLifetime_NAME, zLifetime_Name,
/* disablement strs */ NULL, NULL },
- { /* entry idx, value */ 9, VALUE_OPT_MD5KEY,
- /* equiv idx, value */ 9, VALUE_OPT_MD5KEY,
+ { /* entry idx, value */ 10, VALUE_OPT_MD5KEY,
+ /* equiv idx, value */ 10, VALUE_OPT_MD5KEY,
/* equivalenced to */ NO_EQUIVALENT,
/* min, max, act ct */ 0, 1, 0,
/* opt state flags */ MD5KEY_FLAGS, 0,
/* desc, NAME, name */ zMd5keyText, zMd5key_NAME, zMd5key_Name,
/* disablement strs */ NULL, NULL },
- { /* entry idx, value */ 10, VALUE_OPT_MODULUS,
- /* equiv idx, value */ 10, VALUE_OPT_MODULUS,
+ { /* entry idx, value */ 11, VALUE_OPT_MODULUS,
+ /* equiv idx, value */ 11, VALUE_OPT_MODULUS,
/* equivalenced to */ NO_EQUIVALENT,
/* min, max, act ct */ 0, 1, 0,
/* opt state flags */ MODULUS_FLAGS, 0,
/* desc, NAME, name */ zModulusText, zModulus_NAME, zModulus_Name,
/* disablement strs */ NULL, NULL },
- { /* entry idx, value */ 11, VALUE_OPT_PVT_CERT,
- /* equiv idx, value */ 11, VALUE_OPT_PVT_CERT,
+ { /* entry idx, value */ 12, VALUE_OPT_PVT_CERT,
+ /* equiv idx, value */ 12, VALUE_OPT_PVT_CERT,
/* equivalenced to */ NO_EQUIVALENT,
/* min, max, act ct */ 0, 1, 0,
/* opt state flags */ PVT_CERT_FLAGS, 0,
/* desc, NAME, name */ zPvt_CertText, zPvt_Cert_NAME, zPvt_Cert_Name,
/* disablement strs */ NULL, NULL },
- { /* entry idx, value */ 12, VALUE_OPT_PVT_PASSWD,
- /* equiv idx, value */ 12, VALUE_OPT_PVT_PASSWD,
+ { /* entry idx, value */ 13, VALUE_OPT_PVT_PASSWD,
+ /* equiv idx, value */ 13, VALUE_OPT_PVT_PASSWD,
/* equivalenced to */ NO_EQUIVALENT,
/* min, max, act ct */ 0, 1, 0,
/* opt state flags */ PVT_PASSWD_FLAGS, 0,
/* desc, NAME, name */ zPvt_PasswdText, zPvt_Passwd_NAME, zPvt_Passwd_Name,
/* disablement strs */ NULL, NULL },
- { /* entry idx, value */ 13, VALUE_OPT_GET_PVT_PASSWD,
- /* equiv idx, value */ 13, VALUE_OPT_GET_PVT_PASSWD,
+ { /* entry idx, value */ 14, VALUE_OPT_GET_PVT_PASSWD,
+ /* equiv idx, value */ 14, VALUE_OPT_GET_PVT_PASSWD,
/* equivalenced to */ NO_EQUIVALENT,
/* min, max, act ct */ 0, 1, 0,
/* opt state flags */ GET_PVT_PASSWD_FLAGS, 0,
/* desc, NAME, name */ zGet_Pvt_PasswdText, zGet_Pvt_Passwd_NAME, zGet_Pvt_Passwd_Name,
/* disablement strs */ NULL, NULL },
- { /* entry idx, value */ 14, VALUE_OPT_SIGN_KEY,
- /* equiv idx, value */ 14, VALUE_OPT_SIGN_KEY,
+ { /* entry idx, value */ 15, VALUE_OPT_SIGN_KEY,
+ /* equiv idx, value */ 15, VALUE_OPT_SIGN_KEY,
/* equivalenced to */ NO_EQUIVALENT,
/* min, max, act ct */ 0, 1, 0,
/* opt state flags */ SIGN_KEY_FLAGS, 0,
/* desc, NAME, name */ zSign_KeyText, zSign_Key_NAME, zSign_Key_Name,
/* disablement strs */ NULL, NULL },
- { /* entry idx, value */ 15, VALUE_OPT_SUBJECT_NAME,
- /* equiv idx, value */ 15, VALUE_OPT_SUBJECT_NAME,
+ { /* entry idx, value */ 16, VALUE_OPT_SUBJECT_NAME,
+ /* equiv idx, value */ 16, VALUE_OPT_SUBJECT_NAME,
/* equivalenced to */ NO_EQUIVALENT,
/* min, max, act ct */ 0, 1, 0,
/* opt state flags */ SUBJECT_NAME_FLAGS, 0,
/* desc, NAME, name */ zSubject_NameText, zSubject_Name_NAME, zSubject_Name_Name,
/* disablement strs */ NULL, NULL },
- { /* entry idx, value */ 16, VALUE_OPT_TRUSTED_CERT,
- /* equiv idx, value */ 16, VALUE_OPT_TRUSTED_CERT,
+ { /* entry idx, value */ 17, VALUE_OPT_TRUSTED_CERT,
+ /* equiv idx, value */ 17, VALUE_OPT_TRUSTED_CERT,
/* equivalenced to */ NO_EQUIVALENT,
/* min, max, act ct */ 0, 1, 0,
/* opt state flags */ TRUSTED_CERT_FLAGS, 0,
/* desc, NAME, name */ zTrusted_CertText, zTrusted_Cert_NAME, zTrusted_Cert_Name,
/* disablement strs */ NULL, NULL },
- { /* entry idx, value */ 17, VALUE_OPT_MV_PARAMS,
- /* equiv idx, value */ 17, VALUE_OPT_MV_PARAMS,
+ { /* entry idx, value */ 18, VALUE_OPT_MV_PARAMS,
+ /* equiv idx, value */ 18, VALUE_OPT_MV_PARAMS,
/* equivalenced to */ NO_EQUIVALENT,
/* min, max, act ct */ 0, 1, 0,
/* opt state flags */ MV_PARAMS_FLAGS, 0,
/* desc, NAME, name */ zMv_ParamsText, zMv_Params_NAME, zMv_Params_Name,
/* disablement strs */ NULL, NULL },
- { /* entry idx, value */ 18, VALUE_OPT_MV_KEYS,
- /* equiv idx, value */ 18, VALUE_OPT_MV_KEYS,
+ { /* entry idx, value */ 19, VALUE_OPT_MV_KEYS,
+ /* equiv idx, value */ 19, VALUE_OPT_MV_KEYS,
/* equivalenced to */ NO_EQUIVALENT,
/* min, max, act ct */ 0, 1, 0,
/* opt state flags */ MV_KEYS_FLAGS, 0,
NO_EQUIVALENT, /* '-#' option index */
NO_EQUIVALENT /* index of default opt */
},
- 24 /* full option count */, 19 /* user option count */,
+ 25 /* full option count */, 20 /* user option count */,
ntp_keygen_full_usage, ntp_keygen_short_usage,
NULL, NULL,
PKGDATADIR, ntp_keygen_packager_info
BOOL init_randfile();
/*
- * Don't try to follow symbolic links. Assumes link == file.
+ * Don't try to follow symbolic links on Windows. Assume link == file.
*/
int
-readlink(char *link, char *file, int len)
+readlink(
+ char * link,
+ char * file,
+ int len
+ )
{
return strlen(file);
}
/*
- * Don't try to create a symbolic link for now.
- * Just move the file to the name you need.
+ * Don't try to create symbolic links on Windows, that is supported on
+ * Vista and later only. Instead, if CreateHardLink is available (XP
+ * and later), hardlink the linkname to the original filename. On
+ * earlier systems, user must rename file to match expected link for
+ * ntpd to find it. To allow building a ntp-keygen.exe which loads on
+ * Windows pre-XP, runtime link to CreateHardLinkA().
*/
int
-symlink(char *filename, char *linkname) {
- DeleteFile(linkname);
- MoveFile(filename, linkname);
- return (0);
+symlink(
+ char * filename,
+ char* linkname
+ )
+{
+ typedef BOOL (WINAPI *PCREATEHARDLINKA)(
+ __in LPCSTR lpFileName,
+ __in LPCSTR lpExistingFileName,
+ __reserved LPSECURITY_ATTRIBUTES lpSA
+ );
+ static PCREATEHARDLINKA pCreateHardLinkA;
+ static int tried;
+ HMODULE hDll;
+ FARPROC pfn;
+ int link_created;
+ int saved_errno;
+
+ if (!tried) {
+ tried = TRUE;
+ hDll = LoadLibrary("kernel32.dll");
+ pfn = GetProcAddress(hDll, "CreateHardLinkA");
+ pCreateHardLinkA = (PCREATEHARDLINKA)pfn;
+ }
+
+ if (NULL == pCreateHardLinkA) {
+ errno = ENOSYS;
+ return -1;
+ }
+
+ link_created = (*pCreateHardLinkA)(linkname, filename, NULL);
+
+ if (link_created)
+ return 0;
+
+ saved_errno = GetLastError(); /* yes we play loose */
+ mfprintf(stderr, "Create hard link %s to %s failed: %m\n",
+ linkname, filename);
+ errno = saved_errno;
+ return -1;
}
void
BN_copy(rsa->q, BN_value_one());
pkey = EVP_PKEY_new();
EVP_PKEY_assign_RSA(pkey, rsa);
- PEM_write_PrivateKey(stdout, pkey, NULL, NULL, 0, NULL,
- NULL);
- fclose(stdout);
+ PEM_write_PKCS8PrivateKey(stdout, pkey, NULL, NULL, 0,
+ NULL, NULL);
+ fflush(stdout);
if (debug)
RSA_print_fp(stderr, rsa, 0);
}
rsa = pkey_gqkey->pkey.rsa;
pkey = EVP_PKEY_new();
EVP_PKEY_assign_RSA(pkey, rsa);
- PEM_write_PrivateKey(stdout, pkey,
- cipher, NULL, 0, NULL, passwd2);
- fclose(stdout);
+ PEM_write_PKCS8PrivateKey(stdout, pkey, cipher, NULL, 0,
+ NULL, passwd2);
+ fflush(stdout);
if (debug)
RSA_print_fp(stderr, rsa, 0);
}
BN_copy(dsa->priv_key, BN_value_one());
pkey = EVP_PKEY_new();
EVP_PKEY_assign_DSA(pkey, dsa);
- PEM_write_PrivateKey(stdout, pkey, NULL, NULL, 0, NULL,
- NULL);
- fclose(stdout);
+ PEM_write_PKCS8PrivateKey(stdout, pkey, NULL, NULL, 0,
+ NULL, NULL);
+ fflush(stdout);
if (debug)
DSA_print_fp(stderr, dsa, 0);
}
dsa = pkey_iffkey->pkey.dsa;
pkey = EVP_PKEY_new();
EVP_PKEY_assign_DSA(pkey, dsa);
- PEM_write_PrivateKey(stdout, pkey, cipher, NULL,
- 0, NULL, passwd2);
- fclose(stdout);
+ PEM_write_PKCS8PrivateKey(stdout, pkey, cipher, NULL, 0,
+ NULL, passwd2);
+ fflush(stdout);
if (debug)
DSA_print_fp(stderr, dsa, 0);
}
fprintf(stdout, "# %s\n# %s\n", filename,
ctime(&epoch));
pkey = pkey_mvpar[2];
- PEM_write_PrivateKey(stdout, pkey, NULL, NULL, 0, NULL,
- NULL);
- fclose(stdout);
+ PEM_write_PKCS8PrivateKey(stdout, pkey, NULL, NULL, 0,
+ NULL, NULL);
+ fflush(stdout);
if (debug)
DSA_print_fp(stderr, pkey->pkey.dsa, 0);
}
fprintf(stdout, "# %s\n# %s\n", filename,
ctime(&epoch));
pkey = pkey_mvpar[1];
- PEM_write_PrivateKey(stdout, pkey, cipher, NULL,
- 0, NULL, passwd2);
- fclose(stdout);
+ PEM_write_PKCS8PrivateKey(stdout, pkey, cipher, NULL, 0,
+ NULL, passwd2);
+ fflush(stdout);
if (debug)
DSA_print_fp(stderr, pkey->pkey.dsa, 0);
}
str = fheader("RSAhost", id, hostname);
pkey = EVP_PKEY_new();
EVP_PKEY_assign_RSA(pkey, rsa);
- PEM_write_PrivateKey(str, pkey, cipher, NULL, 0, NULL,
+ PEM_write_PKCS8PrivateKey(str, pkey, cipher, NULL, 0, NULL,
passwd1);
fclose(str);
if (debug)
str = fheader("DSAsign", id, hostname);
pkey = EVP_PKEY_new();
EVP_PKEY_assign_DSA(pkey, dsa);
- PEM_write_PrivateKey(str, pkey, cipher, NULL, 0, NULL,
+ PEM_write_PKCS8PrivateKey(str, pkey, cipher, NULL, 0, NULL,
passwd1);
fclose(str);
if (debug)
str = fheader("IFFkey", id, groupname);
pkey = EVP_PKEY_new();
EVP_PKEY_assign_DSA(pkey, dsa);
- PEM_write_PrivateKey(str, pkey, cipher, NULL, 0, NULL,
+ PEM_write_PKCS8PrivateKey(str, pkey, cipher, NULL, 0, NULL,
passwd1);
fclose(str);
if (debug)
str = fheader("GQkey", id, groupname);
pkey = EVP_PKEY_new();
EVP_PKEY_assign_RSA(pkey, rsa);
- PEM_write_PrivateKey(str, pkey, EVP_des_cbc(), NULL, 0, NULL,
+ PEM_write_PKCS8PrivateKey(str, pkey, cipher, NULL, 0, NULL,
passwd1);
fclose(str);
if (debug)
BN_copy(dsa->pub_key, b);
pkey = EVP_PKEY_new();
EVP_PKEY_assign_DSA(pkey, dsa);
- PEM_write_PrivateKey(str, pkey, EVP_des_cbc(), NULL, 0, NULL,
+ PEM_write_PKCS8PrivateKey(str, pkey, cipher, NULL, 0, NULL,
passwd1);
evpars[i++] = pkey;
if (debug)
dsa2->pub_key = BN_dup(ghat);
pkey1 = EVP_PKEY_new();
EVP_PKEY_assign_DSA(pkey1, dsa2);
- PEM_write_PrivateKey(str, pkey1, EVP_des_cbc(), NULL, 0, NULL,
+ PEM_write_PKCS8PrivateKey(str, pkey1, cipher, NULL, 0, NULL,
passwd1);
evpars[i++] = pkey1;
if (debug)
sdsa->pub_key = BN_dup(xhat[j]);
pkey1 = EVP_PKEY_new();
EVP_PKEY_set1_DSA(pkey1, sdsa);
- PEM_write_PrivateKey(str, pkey1, EVP_des_cbc(), NULL, 0,
+ PEM_write_PKCS8PrivateKey(str, pkey1, cipher, NULL, 0,
NULL, passwd1);
evpars[i++] = pkey1;
if (debug)
*/
int
x509 (
- EVP_PKEY *pkey, /* generic signature algorithm */
- const EVP_MD *md, /* generic digest algorithm */
+ EVP_PKEY *pkey, /* signing key */
+ const EVP_MD *md, /* signature/digest scheme */
char *gqpub, /* identity extension (hex string) */
char *exten, /* private cert extension */
char *name /* subject/issuer name */
X509_time_adj(X509_get_notAfter(cert), lifetime * DAY, &epoch);
subj = X509_get_subject_name(cert);
X509_NAME_add_entry_by_txt(subj, "commonName", MBSTRING_ASC,
- (unsigned char *) name, strlen(name), -1, 0);
+ (u_char *)name, strlen(name), -1, 0);
subj = X509_get_issuer_name(cert);
X509_NAME_add_entry_by_txt(subj, "commonName", MBSTRING_ASC,
- (unsigned char *) name, strlen(name), -1, 0);
+ (u_char *)name, strlen(name), -1, 0);
if (!X509_set_pubkey(cert, pkey)) {
- fprintf(stderr, "Assign key fails\n%s\n",
+ fprintf(stderr, "Assign certificate signing key fails\n%s\n",
ERR_error_string(ERR_get_error(), NULL));
X509_free(cert);
return (0);