Date: Friday, September 13, 2013 @ 15:17:48
  Author: bgyorgy
Revision: 97131

upgpkg: lxdm 0.4.1-27

Fix autologin with __default__ session (FS#36830)

Modified:
  lxdm/trunk/PKGBUILD
  lxdm/trunk/git-fixes.patch

-----------------+
 PKGBUILD        |    6 -
 git-fixes.patch |  178 ++++++++++++++++++++++++++++++++++++++++--------------
 2 files changed, 137 insertions(+), 47 deletions(-)

Modified: PKGBUILD
===================================================================
--- PKGBUILD    2013-09-13 12:35:47 UTC (rev 97130)
+++ PKGBUILD    2013-09-13 13:17:48 UTC (rev 97131)
@@ -5,7 +5,7 @@
 
 pkgname=lxdm
 pkgver=0.4.1
-pkgrel=26
+pkgrel=27
 pkgdesc='Lightweight X11 Display Manager'
 arch=('i686' 'x86_64')
 url="http://sourceforge.net/projects/lxdm/";
@@ -12,7 +12,7 @@
 license=('GPL')
 groups=('lxde')
 depends=('gtk2' 'xorg-server' 'iso-codes')
-makedepends=('git' 'intltool')
+makedepends=('intltool')
 optdepends=('gtk-engines: default GTK+ theme'
             'librsvg: display the default background')
 install=$pkgname.install
@@ -23,7 +23,7 @@
         git-fixes.patch
         default-config.patch)
 md5sums=('8da1cfc2be6dc9217c85a7cf51e1e821'
-         '62ca036a270732ee39b11b9ee27ae338'
+         '03d0779fbac1a9964776c82e69fbc53e'
          'c61ec8ffd3fe8bd2a6a9178393622f4c')
 
 prepare(){

Modified: git-fixes.patch
===================================================================
--- git-fixes.patch     2013-09-13 12:35:47 UTC (rev 97130)
+++ git-fixes.patch     2013-09-13 13:17:48 UTC (rev 97131)
@@ -2192,7 +2192,7 @@
 +#endif /*_LXCOMMON_H_*/
 +
 diff --git a/src/lxdm.c b/src/lxdm.c
-index 5c279af..85ef3be 100644
+index 5c279af..8ac8478 100644
 --- a/src/lxdm.c
 +++ b/src/lxdm.c
 @@ -24,9 +24,6 @@
@@ -2256,10 +2256,39 @@
  static GSList *session_list;
  
  static void lxdm_startx(LXSession *s);
-@@ -153,18 +159,6 @@ void stop_pid(int pid)
-     while( waitpid(-1, 0, WNOHANG) > 0 ) ;
+@@ -128,7 +134,7 @@ static void set_active_vt(int vt)
+       if( fd < 0 )
+               fd = 0;
+       ioctl(fd, VT_ACTIVATE, vt);
+-      if( fd != 0 )
++      if(fd!=0)
+               close(fd);
  }
  
+@@ -142,28 +148,19 @@ void stop_pid(int pid)
+     {
+         if( kill(pid, SIGTERM) )
+             kill(pid, SIGKILL);
+-        while( 1 )
+-        {
+-            int wpid, status;
+-            wpid = waitpid(pid,&status,0);
+-            if(wpid<0 || pid == wpid)
+-              break;
+-        }
+     }
+-    while( waitpid(-1, 0, WNOHANG) > 0 ) ;
+-}
++    while( 1 )
++    {
++        int wpid, status;
++        wpid = waitpid(pid,&status,0);
++        if(pid == wpid)
++            break;
++      if(wpid<0 && errno!=EINTR)
++              break;
++    }
+ 
 -#if HAVE_LIBPAM
 -static void close_pam_session(pam_handle_t *pamh)
 -{
@@ -2269,13 +2298,13 @@
 -    //err=pam_setcred(pamh, PAM_DELETE_CRED);
 -    pam_end(pamh, err);
 -    pamh = NULL;
--}
++    while( waitpid(-1, 0, WNOHANG) > 0 ) ;
+ }
 -#endif
--
+ 
  static LXSession *lxsession_find_greeter(void)
  {
-       GSList *p;
-@@ -271,7 +265,7 @@ static int lxsession_alloc_tty(void)
+@@ -271,7 +268,7 @@ static int lxsession_alloc_tty(void)
  static int lxsession_alloc_display(void)
  {
        int i;
@@ -2284,7 +2313,7 @@
        {
                if(!display_is_used(i))
                        return i;
-@@ -299,6 +293,7 @@ static LXSession *lxsession_add(void)
+@@ -299,6 +296,7 @@ static LXSession *lxsession_add(void)
                return NULL;
        }
        s->env=NULL;
@@ -2292,7 +2321,7 @@
        session_list=g_slist_prepend(session_list,s);
        lxdm_startx(s);
        return s;
-@@ -354,10 +349,7 @@ static void lxsession_stop(LXSession *s)
+@@ -354,10 +352,7 @@ static void lxsession_stop(LXSession *s)
        {
                xconn_clean(s->dpy);
        }
@@ -2304,7 +2333,24 @@
  #if HAVE_LIBCK_CONNECTOR
        if( s->ckc != NULL )
        {
-@@ -467,7 +459,7 @@ static char *lxsession_xserver_command(LXSession *s)
+@@ -427,6 +422,7 @@ static char *lxsession_xserver_command(LXSession *s)
+       int arc;
+       char **arg;
+       int i;
++      int novtswitch=0;
+       
+       if(s->option)
+       {
+@@ -462,12 +458,16 @@ static char *lxsession_xserver_command(LXSession *s)
+                       g_free(arg[i]);
+                       arc--;memcpy(arg+i,arg+i+1,(arc-i)*sizeof(char*));
+               }
++              else if(!strcmp(p,"-novtswitch"))
++              {
++                      novtswitch=1;
++              }
+               else
+               {
                        i++;
                }
        }
@@ -2313,7 +2359,7 @@
        arg = g_renew(char *, arg, arc + 10);
        if(nr_tty)
        {
-@@ -477,8 +469,11 @@ printf("arc %d\n",arc);
+@@ -477,8 +477,15 @@ printf("arc %d\n",arc);
        arg[arc++] = g_strdup_printf(":%d",s->display);
        if(s->tty>0)
                arg[arc++] = g_strdup_printf("vt%02d", s->tty);
@@ -2324,10 +2370,14 @@
 +              arg[arc++] = g_strdup("-nolisten");
 +              arg[arc++] = g_strdup("tcp");
 +      }
++      if(!novtswitch)
++      {
++              arg[arc++] = g_strdup("-novtswitch");
++      }
        arg[arc] = NULL;
        p=g_strjoinv(" ", arg);
        g_strfreev(arg);
-@@ -518,15 +513,17 @@ void lxdm_get_tty(void)
+@@ -518,15 +525,17 @@ void lxdm_get_tty(void)
                {
                        nr_tty=1;
                }
@@ -2348,7 +2398,7 @@
                if(plymouth)
                {
                        nr_tty=1;
-@@ -550,13 +547,13 @@ void lxdm_quit_self(int code)
+@@ -550,13 +559,13 @@ void lxdm_quit_self(int code)
  static void log_init(void)
  {
        int fd_log;
@@ -2363,7 +2413,7 @@
  }
  
  static void log_ignore(const gchar *log_domain, GLogLevelFlags log_level,
-@@ -647,6 +644,19 @@ static void replace_env(char** env, const char* name, 
const char* new_val)
+@@ -647,6 +656,19 @@ static void replace_env(char** env, const char* name, 
const char* new_val)
      *(penv + 1) = NULL;
  }
  
@@ -2383,7 +2433,7 @@
  #ifndef DISABLE_XAUTH
  
  static inline void xauth_write_uint16(int fd,uint16_t data)
-@@ -665,15 +675,20 @@ static inline void xauth_write_string(int fd,const char 
*s)
+@@ -665,15 +687,20 @@ static inline void xauth_write_string(int fd,const char 
*s)
        write(fd,s,len);
  }
  
@@ -2408,7 +2458,7 @@
        xauth_write_string(fd,"MIT-MAGIC-COOKIE-1");
        xauth_write_uint16(fd,16);
        write(fd,data,16);
-@@ -695,139 +710,55 @@ static void create_server_auth(LXSession *s)
+@@ -695,139 +722,55 @@ static void create_server_auth(LXSession *s)
  
        authfile = g_strdup_printf("/var/run/lxdm/lxdm-:%d.auth",s->display);
  
@@ -2475,7 +2525,8 @@
 -static char *user_pass[2];
 -
 -static int do_conv(int num, const struct pam_message **msg,struct 
pam_response **resp, void *arg)
--{
++int lxdm_auth_user(int type,char *user, char *pass, struct passwd **ppw)
+ {
 -      int result = PAM_SUCCESS;
 -      int i;
 -      *resp = (struct pam_response *) calloc(num, sizeof(struct 
pam_response));
@@ -2504,8 +2555,7 @@
 -#endif
 -
 -int lxdm_auth_user(char *user, char *pass, struct passwd **ppw)
-+int lxdm_auth_user(int type,char *user, char *pass, struct passwd **ppw)
- {
+-{
 -    struct passwd *pw;
 -#if !HAVE_LIBPAM
 -    struct spwd *sp;
@@ -2572,7 +2622,7 @@
      s=lxsession_find_greeter();
      if(!s) s=lxsession_find_idle();
      if(!s) s=lxsession_add();
-@@ -836,97 +767,12 @@ int lxdm_auth_user(char *user, char *pass, struct passwd 
**ppw)
+@@ -836,97 +779,12 @@ int lxdm_auth_user(char *user, char *pass, struct passwd 
**ppw)
          g_critical("lxsession_add fail\n");
          exit(0);
      }
@@ -2606,8 +2656,12 @@
 -    *ppw = pw;
 -    g_debug("user %s auth ok\n",pw->pw_name);
 -    return AUTH_SUCCESS;
--}
--
++      ret=lxdm_auth_user_authenticate(&s->auth,user,pass,type);
++      if(ret==AUTH_SUCCESS)
++              *ppw=&s->auth.pw;
++      return ret;
+ }
+ 
 -#if HAVE_LIBPAM
 -void setup_pam_session(LXSession *s,struct passwd *pw,char *session_name)
 -{
@@ -2663,18 +2717,14 @@
 -              free(penv[i]);
 -      }
 -      free(penv);
-+      ret=lxdm_auth_user_authenticate(&s->auth,user,pass,type);
-+      if(ret==AUTH_SUCCESS)
-+              *ppw=&s->auth.pw;
-+      return ret;
- }
- 
+-}
+-
 -#endif
 -
  static void close_left_fds(void)
  {
        struct dirent **list;
-@@ -945,9 +791,15 @@ static void close_left_fds(void)
+@@ -945,9 +803,15 @@ static void close_left_fds(void)
                close(fd);
        }
        free(list);
@@ -2691,7 +2741,7 @@
  {
      int fd;
      
-@@ -968,9 +820,6 @@ void switch_user(struct passwd *pw, char *run, char **env)
+@@ -968,9 +832,6 @@ void switch_user(struct passwd *pw, char *run, char **env)
          dup2(fd,STDERR_FILENO);
          close(fd);
      }
@@ -2701,7 +2751,7 @@
  
        /* reset signal */
        signal(SIGCHLD, SIG_DFL);
-@@ -1114,7 +963,7 @@ void lxdm_startx(LXSession *s)
+@@ -1114,7 +975,7 @@ void lxdm_startx(LXSession *s)
        g_strfreev(args);
        lxcom_add_child_watch(s->server, on_xserver_stop, s);
  
@@ -2710,7 +2760,7 @@
        for( i = 0; i < 100; i++ )
        {
                if(lxcom_last_sig==SIGINT || lxcom_last_sig==SIGTERM)
-@@ -1124,6 +973,7 @@ void lxdm_startx(LXSession *s)
+@@ -1124,6 +985,7 @@ void lxdm_startx(LXSession *s)
                g_usleep(50 * 1000);
                //g_message("retry %d\n",i);
        }
@@ -2718,7 +2768,7 @@
        if(s->dpy==NULL)
                exit(EXIT_FAILURE);
        
-@@ -1200,6 +1050,11 @@ static void on_session_stop(void *data,int pid, int 
status)
+@@ -1200,6 +1062,11 @@ static void on_session_stop(void *data,int pid, int 
status)
        {
                lxsession_free(s);
        }
@@ -2730,7 +2780,7 @@
        gchar *argv[] = { "/etc/lxdm/PostLogout", NULL };
        g_spawn_async(NULL, argv, s->env, G_SPAWN_SEARCH_PATH, NULL, NULL, 
NULL, NULL);
  }
-@@ -1212,7 +1067,7 @@ gboolean lxdm_get_session_info(char *session,char 
**pname,char **pexec)
+@@ -1212,7 +1079,7 @@ gboolean lxdm_get_session_info(char *session,char 
**pname,char **pexec)
                name=g_key_file_get_string(config, "base", "session", 0);
                if(!name && getenv("PREFERRED"))
                        name = g_strdup(getenv("PREFERRED"));
@@ -2739,7 +2789,7 @@
                        name = g_strdup(getenv("DESKTOP"));
                if(!name) name=g_strdup("LXDE");
        }
-@@ -1291,7 +1146,7 @@ static void lxdm_save_login(char *session,char *lang)
+@@ -1291,7 +1158,7 @@ static void lxdm_save_login(char *session,char *lang)
                lang="";
        var=g_key_file_new();
        g_key_file_set_list_separator(var, ' ');
@@ -2748,7 +2798,7 @@
        old=g_key_file_get_string(var,"base","last_session",0);
        if(0!=g_strcmp0(old,session))
        {
-@@ -1343,7 +1198,7 @@ static void lxdm_save_login(char *session,char *lang)
+@@ -1343,7 +1210,7 @@ static void lxdm_save_login(char *session,char *lang)
          char* data = g_key_file_to_data(var, &len, NULL);
                mkdir("/var/lib/lxdm",0755);
                chmod("/var/lib/lxdm",0755);
@@ -2757,7 +2807,16 @@
          g_free(data);
        }
        g_key_file_free(var);
-@@ -1423,12 +1278,10 @@ void lxdm_do_login(struct passwd *pw, char *session, 
char *lang, char *option)
+@@ -1357,6 +1224,8 @@ void lxdm_do_login(struct passwd *pw, char *session, 
char *lang, char *option)
+       LXSession *s,*prev;
+       
+       lxdm_save_login(session,lang);
++      if(!strcmp(session,"__default__"))
++              session=NULL;
+ 
+       if(!session ||!session[0] || !lang || !lang[0])
+       {
+@@ -1423,12 +1292,10 @@ void lxdm_do_login(struct passwd *pw, char *session, 
char *lang, char *option)
                s->ckc=NULL;
        }
  #endif
@@ -2772,7 +2831,7 @@
  #else
        if(!s->ckc)
  #endif
-@@ -1451,9 +1304,20 @@ void lxdm_do_login(struct passwd *pw, char *session, 
char *lang, char *option)
+@@ -1451,9 +1318,20 @@ void lxdm_do_login(struct passwd *pw, char *session, 
char *lang, char *option)
                                                          "x11-display", &n,
                                                          "is-local",&is_local,
                                                          NULL))
@@ -2794,7 +2853,7 @@
        char** env, *path;
        int n_env,i;
        n_env  = g_strv_length(environ);
-@@ -1483,17 +1347,22 @@ void lxdm_do_login(struct passwd *pw, char *session, 
char *lang, char *option)
+@@ -1483,17 +1361,22 @@ void lxdm_do_login(struct passwd *pw, char *session, 
char *lang, char *option)
                replace_env(env, "LANGUAGE=", lang);
        }
        s->env = env;
@@ -2823,7 +2882,7 @@
        g_free(session_name);
        g_free(session_exec);
        if(alloc_session)
-@@ -1519,7 +1388,7 @@ void lxdm_do_shutdown(void)
+@@ -1519,7 +1402,7 @@ void lxdm_do_shutdown(void)
        char *cmd;
        cmd = g_key_file_get_string(config, "cmd", "shutdown", 0);
        if( !cmd ) cmd = g_strdup("shutdown -h now");
@@ -2832,7 +2891,7 @@
        g_spawn_command_line_async(cmd,0);
        g_free(cmd);
        lxdm_quit_self(0);
-@@ -1548,10 +1417,30 @@ int lxdm_do_auto_login(void)
+@@ -1548,10 +1431,30 @@ int lxdm_do_auto_login(void)
        if(count==1)
                pass = g_key_file_get_string(config, "base", "password", 0);
        #endif
@@ -2863,7 +2922,7 @@
                if(p[0]=='@')   
                {
                        option=p+1;
-@@ -1559,11 +1448,16 @@ int lxdm_do_auto_login(void)
+@@ -1559,11 +1462,16 @@ int lxdm_do_auto_login(void)
                        
session=g_key_file_get_string(config,option,"session",0);
                        lang=g_key_file_get_string(config,option,"lang",0);
                }
@@ -2881,7 +2940,7 @@
                if(ret==AUTH_SUCCESS)
                {
                        lxdm_do_login(pw,session,lang,option);
-@@ -1571,9 +1465,11 @@ int lxdm_do_auto_login(void)
+@@ -1571,9 +1479,11 @@ int lxdm_do_auto_login(void)
                }
                g_free(user);g_free(session);g_free(lang);
        }
@@ -2894,7 +2953,7 @@
  }
  
  static void log_sigsegv(void)
-@@ -1677,8 +1573,23 @@ GKeyFile *lxdm_user_list(void)
+@@ -1677,8 +1587,23 @@ GKeyFile *lxdm_user_list(void)
        g_key_file_set_comment(kf,NULL,NULL,"lxdm user list",NULL);
        while((pw=getpwent())!=NULL)
        {
@@ -2918,6 +2977,37 @@
                if(strncmp(pw->pw_dir,"/home/",6))
                {
                        if(!strv_find(white,pw->pw_name))
+@@ -1780,21 +1705,21 @@ int main(int arc, char *arg[])
+                       return res?0:-1;
+               }
+       }
+-      if( getuid() != 0 )
++      if(getuid() != 0)
+       {
+               fprintf(stderr, "only root is allowed to use this program\n");
+               exit(EXIT_FAILURE);
+       }
+ 
+-      if( daemonmode )
++      if(daemonmode)
+       {
+               (void)daemon(1, 1);
+       }
+       log_init();
+ 
+-      if( debugmode )
++      if(!debugmode)
+       {
+-              /* turn of debug output */
++              /* turn off debug output */
+               g_log_set_handler(NULL, G_LOG_LEVEL_DEBUG, log_ignore, NULL);
+       }
+ 
+@@ -1832,3 +1757,4 @@ int main(int arc, char *arg[])
+ 
+       return 0;
+ }
++
 diff --git a/src/lxdm.h b/src/lxdm.h
 index 4c79ca3..568573f 100644
 --- a/src/lxdm.h

Reply via email to