Changeset 894 in openpam


Ignore:
Timestamp:
Jan 17, 2017, 2:29:41 PM (4 years ago)
Author:
Dag-Erling Smørgrav
Message:

merge r863,r874,r891: partial unit tests for openpam_dispatch()
merge r864-867,r871,r880,r883: various improvements to tests and test suite

Location:
branches/nooath
Files:
10 edited
3 copied

Legend:

Unmodified
Added
Removed
  • branches/nooath

  • branches/nooath/lib/libpam/openpam_dispatch.c

    r855 r894  
    4141
    4242#include <sys/param.h>
     43
     44#include <stdint.h>
    4345
    4446#include <security/pam_appl.h>
  • branches/nooath/t

    • Property svn:ignore
      •  

        old new  
        44Makefile.in
        55t_openpam_ctype
         6t_openpam_dispatch
        67t_openpam_readlinev
        78t_openpam_readword
        8 t_rfc4648
        99*.log
        1010*.trs
  • branches/nooath/t/Makefile.am

    r855 r894  
    33AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/lib/libpam
    44
    5 noinst_HEADERS = t.h
     5AM_TESTS_ENVIRONMENT = \
     6        PAM_RETURN_SO=$(abs_top_builddir)/modules/pam_return/.libs/pam_return.so
     7
     8noinst_HEADERS = t.h t_pam_conv.h
    69
    710# tests
    811TESTS =
    912TESTS += t_openpam_ctype
     13TESTS += t_openpam_dispatch
    1014TESTS += t_openpam_readword
    1115TESTS += t_openpam_readlinev
     
    1418# libt - common support code
    1519check_LIBRARIES = libt.a
    16 libt_a_SOURCES = t_main.c t_file.c
     20libt_a_SOURCES = t_main.c t_file.c t_pam_conv.c
    1721
    1822# link with libpam and libt
  • branches/nooath/t/t.h

    r657 r894  
    3333#define T_H_INCLUDED
    3434
     35#if _BullseyeCoverage
     36_Pragma("BullseyeCoverage save off")
     37#endif
     38
    3539#include <security/openpam_attr.h>
    3640
     
    4347#define T_FUNC(n, d)                            \
    4448        static int t_ ## n ## _func(void *);    \
    45         static const struct t_test t_ ## n =    \
     49        static struct t_test t_ ## n =  \
    4650            { t_ ## n ## _func, d, NULL };      \
    4751        static int t_ ## n ## _func(OPENPAM_UNUSED(void *arg))
     
    4953#define T_FUNC_ARG(n, d, a)                     \
    5054        static int t_ ## n ## _func(void *);    \
    51         static const struct t_test t_ ## n =    \
     55        static struct t_test t_ ## n =  \
    5256            { t_ ## n ## _func, d, a };         \
    5357        static int t_ ## n ## _func(void *arg)
     
    5862extern const char *t_progname;
    5963
    60 const struct t_test **t_prepare(int, char **);
     64struct t_test **t_prepare(int, char **);
    6165void t_cleanup(void);
    6266
  • branches/nooath/t/t_file.c

    r648 r894  
    9393        if (ferror(tf->file))
    9494                err(1, "%s(): vfprintf()", __func__);
     95        if (fflush(tf->file) != 0)
     96                err(1, "%s(): fflush()", __func__);
    9597        return (len);
    9698}
  • branches/nooath/t/t_main.c

    r651 r894  
    7171main(int argc, char *argv[])
    7272{
    73         const struct t_test **t_plan;
     73        struct t_test **t_plan;
    7474        const char *desc;
    7575        int n, pass, fail;
  • branches/nooath/t/t_openpam_ctype.c

    r855 r894  
    9696 */
    9797
    98 static const struct t_test *t_plan[] = {
     98static struct t_test *t_plan[] = {
    9999        T(t_oc_digit),
    100100        T(t_oc_xdigit),
     
    109109};
    110110
    111 const struct t_test **
     111struct t_test **
    112112t_prepare(int argc, char *argv[])
    113113{
  • branches/nooath/t/t_openpam_dispatch.c

    r867 r894  
    4646#include "t_pam_conv.h"
    4747
     48const char *pam_return_so;
     49
     50T_FUNC(null, "null handle")
     51{
     52        int pam_err;
     53
     54#if __clang__
     55#pragma clang diagnostic push
     56#pragma clang diagnostic ignored "-Wnonnull"
     57#elif __GNUC__
     58#pragma GCC diagnostic push
     59#pragma GCC diagnostic ignored "-Wnonnull"
     60#endif
     61        pam_err = pam_authenticate(NULL, 0);
     62#if __clang__
     63#pragma clang diagnostic pop
     64#elif __GNUC__
     65#pragma GCC diagnostic pop
     66#endif
     67        return (pam_err == PAM_SYSTEM_ERR);
     68}
     69
    4870T_FUNC(empty_policy, "empty policy")
    4971{
     
    90112}
    91113
     114static struct t_pam_return_case {
     115        int              facility;
     116        int              primitive;
     117        int              flags;
     118        struct {
     119                int              ctlflag;
     120                int              modret;
     121        } mod[2];
     122        int              result;
     123} t_pam_return_cases[] = {
     124        {
     125                PAM_AUTH, PAM_SM_AUTHENTICATE, 0,
     126                {
     127                        { PAM_REQUIRED, PAM_SUCCESS },
     128                        { PAM_REQUIRED, PAM_SUCCESS },
     129                },
     130                PAM_SUCCESS,
     131        },
     132};
     133
     134T_FUNC(mod_return, "module return value")
     135{
     136        struct t_pam_return_case *tc;
     137        struct t_pam_conv_script script;
     138        struct pam_conv pamc;
     139        struct t_file *tf;
     140        pam_handle_t *pamh;
     141        unsigned int i, j, n;
     142        int pam_err;
     143
     144        memset(&script, 0, sizeof script);
     145        pamc.conv = &t_pam_conv;
     146        pamc.appdata_ptr = &script;
     147        n = sizeof t_pam_return_cases / sizeof t_pam_return_cases[0];
     148        for (i = 0; i < n; ++i) {
     149                tc = &t_pam_return_cases[i];
     150                tf = t_fopen(NULL);
     151                for (j = 0; j < 2; ++j) {
     152                        t_fprintf(tf, "%s %s %s error=%s\n",
     153                            pam_facility_name[tc->facility],
     154                            pam_control_flag_name[tc->mod[j].ctlflag],
     155                            pam_return_so,
     156                            pam_err_name[tc->mod[j].modret]);
     157                }
     158                pam_err = pam_start(tf->name, "test", &pamc, &pamh);
     159                t_verbose("pam_start() returned %d\n", pam_err);
     160                if (pam_err != PAM_SUCCESS)
     161                        continue;
     162                switch (tc->primitive) {
     163                case PAM_SM_AUTHENTICATE:
     164                        pam_err = pam_authenticate(pamh, tc->flags);
     165                        break;
     166                case PAM_SM_SETCRED:
     167                        pam_err = pam_setcred(pamh, tc->flags);
     168                        break;
     169                case PAM_SM_ACCT_MGMT:
     170                        pam_err = pam_acct_mgmt(pamh, tc->flags);
     171                        break;
     172                case PAM_SM_OPEN_SESSION:
     173                        pam_err = pam_open_session(pamh, tc->flags);
     174                        break;
     175                case PAM_SM_CLOSE_SESSION:
     176                        pam_err = pam_close_session(pamh, tc->flags);
     177                        break;
     178                case PAM_SM_CHAUTHTOK:
     179                        pam_err = pam_chauthtok(pamh, tc->flags);
     180                        break;
     181                }
     182                t_verbose("%s returned %d\n",
     183                    pam_func_name[tc->primitive], pam_err);
     184                t_fclose(tf);
     185        }
     186        return (1);
     187}
     188
    92189
    93190
     
    97194
    98195static struct t_test *t_plan[] = {
     196        T(null),
    99197        T(empty_policy),
     198        T(mod_return),
    100199
    101200        NULL
     
    105204t_prepare(int argc, char *argv[])
    106205{
     206
     207        if ((pam_return_so = getenv("PAM_RETURN_SO")) == NULL)
     208                return (NULL);
    107209
    108210        openpam_set_feature(OPENPAM_RESTRICT_MODULE_NAME, 0);
  • branches/nooath/t/t_openpam_readlinev.c

    r855 r894  
    307307 */
    308308
    309 static const struct t_test *t_plan[] = {
     309static struct t_test *t_plan[] = {
    310310        T(empty_input),
    311311        T(empty_line),
     
    324324};
    325325
    326 const struct t_test **
     326struct t_test **
    327327t_prepare(int argc, char *argv[])
    328328{
  • branches/nooath/t/t_openpam_readword.c

    r855 r894  
    958958 */
    959959
    960 static const struct t_test *t_plan[] = {
     960static struct t_test *t_plan[] = {
    961961        T(empty_input),
    962962        T(empty_line),
     
    10281028};
    10291029
    1030 const struct t_test **
     1030struct t_test **
    10311031t_prepare(int argc, char *argv[])
    10321032{
Note: See TracChangeset for help on using the changeset viewer.