~ubuntu-branches/ubuntu/quantal/lightdm/quantal

« back to all changes in this revision

Viewing changes to tests/src/libsystem.c

  • Committer: Package Import Robot
  • Author(s): Robert Ancell
  • Date: 2012-04-05 17:26:50 UTC
  • mfrom: (1.1.27)
  • Revision ID: package-import@ubuntu.com-20120405172650-sy4str1re63aok62
Tags: 1.2.0-0ubuntu1
* New upstream release.
  - Backup .xsession-errors on login (LP: #951597)
  - Handle failures in pam_setcred
  - Open log files in append mode (LP: #951597)
  - Add extra checks in liblightdm so that it doesn't send invalid messages
    to the daemon (LP: #969023)
  - Fix gdmflexiserver not being added to the path (broken since 1.1.4)
    (LP: #953554)
  - Fix PAM conversations after authentication from locking up sessions
    (LP: #956848)
  - Fix PAM informational messages locking up autologin
  - Change XDMCP manage timeout from 10ms to 126s (maximum specified in the
    XDMCP specification)
  - Fix greeter-show-guest example (LP: #972711)

Show diffs side-by-side

added added

removed removed

Lines of Context:
445
445
    return PAM_SUCCESS;
446
446
}
447
447
 
 
448
static void
 
449
send_info (pam_handle_t *pamh, const char *message)
 
450
{
 
451
    struct pam_message **msg;
 
452
    struct pam_response *resp = NULL;
 
453
 
 
454
    msg = calloc (1, sizeof (struct pam_message *));
 
455
    msg[0] = malloc (sizeof (struct pam_message));
 
456
    msg[0]->msg_style = PAM_TEXT_INFO;
 
457
    msg[0]->msg = message;
 
458
    pamh->conversation.conv (1, (const struct pam_message **) msg, &resp, pamh->conversation.appdata_ptr);
 
459
    free (msg[0]);
 
460
    free (msg);
 
461
    if (resp)
 
462
    {
 
463
        if (resp[0].resp)
 
464
            free (resp[0].resp);
 
465
        free (resp);
 
466
    }
 
467
}
 
468
 
448
469
int
449
470
pam_authenticate (pam_handle_t *pamh, int flags)
450
471
{
484
505
        free (resp);
485
506
    }
486
507
 
 
508
    if (strcmp (pamh->user, "log-pam") == 0)
 
509
        send_info (pamh, "pam_authenticate");
 
510
 
487
511
    /* Crash on authenticate */
488
512
    if (strcmp (pamh->user, "crash-authenticate") == 0)
489
513
        kill (getpid (), SIGSEGV);
728
752
    if (pamh == NULL)
729
753
        return PAM_SYSTEM_ERR;
730
754
 
 
755
    if (strcmp (pamh->user, "session-error") == 0)
 
756
        return PAM_SESSION_ERR;
 
757
 
 
758
    if (strcmp (pamh->user, "log-pam") == 0)
 
759
        send_info (pamh, "pam_open_session");
 
760
 
 
761
    if (strcmp (pamh->user, "make-home-dir") == 0)
 
762
    {
 
763
        struct passwd *entry;
 
764
        entry = getpwnam (pamh->user);
 
765
        g_mkdir_with_parents (entry->pw_dir, 0755);
 
766
    }
 
767
 
731
768
    return PAM_SUCCESS;
732
769
}
733
770
 
737
774
    if (pamh == NULL)
738
775
        return PAM_SYSTEM_ERR;
739
776
 
 
777
    if (strcmp (pamh->user, "log-pam") == 0)
 
778
        send_info (pamh, "pam_close_session");
 
779
 
740
780
    return PAM_SUCCESS;
741
781
}
742
782
 
749
789
    if (!pamh->user)
750
790
        return PAM_USER_UNKNOWN;
751
791
 
 
792
    if (strcmp (pamh->user, "log-pam") == 0)
 
793
        send_info (pamh, "pam_acct_mgmt");
 
794
 
752
795
    if (strcmp (pamh->user, "denied") == 0)
753
796
        return PAM_PERM_DENIED;
754
797
    if (strcmp (pamh->user, "expired") == 0)
770
813
    if (pamh == NULL)
771
814
        return PAM_SYSTEM_ERR;
772
815
 
 
816
    if (strcmp (pamh->user, "log-pam") == 0)
 
817
        send_info (pamh, "pam_chauthtok");
 
818
 
773
819
    msg = malloc (sizeof (struct pam_message *) * 1);
774
820
    msg[0] = malloc (sizeof (struct pam_message));
775
821
    msg[0]->msg_style = PAM_PROMPT_ECHO_OFF;
805
851
    if (pamh == NULL)
806
852
        return PAM_SYSTEM_ERR;
807
853
 
 
854
    if (strcmp (pamh->user, "log-pam") == 0)
 
855
        send_info (pamh, "pam_setcred");
 
856
 
808
857
    /* Put the test directories into the path */
809
858
    e = g_strdup_printf ("PATH=%s/tests/src/.libs:%s/tests/src:%s/tests/src:%s/src:%s", BUILDDIR, BUILDDIR, SRCDIR, BUILDDIR, pam_getenv (pamh, "PATH"));
810
859
    pam_putenv (pamh, e);
811
860
    g_free (e);
812
861
 
 
862
    if (strcmp (pamh->user, "cred-error") == 0)
 
863
        return PAM_CRED_ERR;
 
864
    if (strcmp (pamh->user, "cred-expired") == 0)
 
865
        return PAM_CRED_EXPIRED;
 
866
    if (strcmp (pamh->user, "cred-unavail") == 0)
 
867
        return PAM_CRED_UNAVAIL;
 
868
 
813
869
    /* Join special groups if requested */
814
870
    if (strcmp (pamh->user, "group-member") == 0 && flags & PAM_ESTABLISH_CRED)
815
871
    {
841
897
{
842
898
    if (pamh == NULL)
843
899
        return PAM_SYSTEM_ERR;
844
 
 
 
900
  
845
901
    free (pamh->service_name);
846
902
    if (pamh->user)
847
903
        free (pamh->user);