1/* Licensed to the Apache Software Foundation (ASF) under one or more 2 * contributor license agreements. See the NOTICE file distributed with 3 * this work for additional information regarding copyright ownership. 4 * The ASF licenses this file to You under the Apache License, Version 2.0 5 * (the "License"); you may not use this file except in compliance with 6 * the License. You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17#ifndef _PASSWD_COMMON_H 18#define _PASSWD_COMMON_H 19 20#include "apr.h" 21#include "apr_lib.h" 22#include "apr_strings.h" 23#include "apr_errno.h" 24#include "apr_file_io.h" 25#include "apr_general.h" 26#include "apr_version.h" 27#if !APR_VERSION_AT_LEAST(2,0,0) 28#include "apu_version.h" 29#endif 30 31#define MAX_STRING_LEN 256 32 33#define ALG_PLAIN 0 34#define ALG_CRYPT 1 35#define ALG_APMD5 2 36#define ALG_APSHA 3 37#define ALG_BCRYPT 4 38 39#define BCRYPT_DEFAULT_COST 5 40 41#define ERR_FILEPERM 1 42#define ERR_SYNTAX 2 43#define ERR_PWMISMATCH 3 44#define ERR_INTERRUPTED 4 45#define ERR_OVERFLOW 5 46#define ERR_BADUSER 6 47#define ERR_INVALID 7 48#define ERR_RANDOM 8 49#define ERR_GENERAL 9 50#define ERR_ALG_NOT_SUPP 10 51 52#define NL APR_EOL_STR 53 54#if defined(WIN32) || defined(NETWARE) 55#define CRYPT_ALGO_SUPPORTED 0 56#define PLAIN_ALGO_SUPPORTED 1 57#else 58#define CRYPT_ALGO_SUPPORTED 1 59#define PLAIN_ALGO_SUPPORTED 0 60#endif 61 62#if APR_VERSION_AT_LEAST(2,0,0) || \ 63 (APU_MAJOR_VERSION == 1 && APU_MINOR_VERSION >= 5) 64#define BCRYPT_ALGO_SUPPORTED 1 65#else 66#define BCRYPT_ALGO_SUPPORTED 0 67#endif 68 69/* 70 * Must be initialized with apr_file_open_stderr() before using any of the 71 * below functions. 72 */ 73extern apr_file_t *errfile; 74 75struct passwd_ctx { 76 apr_pool_t *pool; 77 const char *errstr; 78 char *out; 79 apr_size_t out_len; 80 char *passwd; 81 int alg; 82 int cost; 83 enum { 84 PW_PROMPT = 0, 85 PW_ARG, 86 PW_STDIN, 87 PW_PROMPT_VERIFY, 88 } passwd_src; 89}; 90 91 92/* 93 * To be used as apr_pool_abort_fn 94 */ 95int abort_on_oom(int rc); 96 97/* 98 * Write a line to the file. On error, print a message and exit 99 */ 100void putline(apr_file_t *f, const char *l); 101 102/* 103 * The following functions return zero on success; otherwise, one of 104 * the ERR_* codes is returned and an error message is stored in ctx->errstr. 105 */ 106 107/* 108 * Parse the algorithm specific options. 109 */ 110int parse_common_options(struct passwd_ctx *ctx, char opt, const char *opt_arg); 111 112/* 113 * Ask for password with verification. 114 */ 115int get_password(struct passwd_ctx *ctx); 116 117/* 118 * Make a password record from the given information. 119 */ 120int mkhash(struct passwd_ctx *ctx); 121 122#endif /* _PASSWD_COMMON_H */ 123 124