Set environment variables for scripts
This commit is contained in:
		
							parent
							
								
									293d71264e
								
							
						
					
					
						commit
						0d5cbfcfce
					
				| @ -133,6 +133,26 @@ void notification_run_script(struct notification *n) | |||||||
|                         if (pid2) { |                         if (pid2) { | ||||||
|                                 exit(0); |                                 exit(0); | ||||||
|                         } else { |                         } else { | ||||||
|  |                                 // Set environment variables
 | ||||||
|  |                                 gchar *n_id_str = g_strdup_printf("%i", n->id); | ||||||
|  |                                 gchar *n_progress_str = g_strdup_printf("%i", n->progress); | ||||||
|  |                                 gchar *n_timeout_str = g_strdup_printf("%li", n->timeout/1000); | ||||||
|  |                                 gchar *n_timestamp_str = g_strdup_printf("%li", n->timestamp / 1000); | ||||||
|  |                                 char* icon_path = get_path_from_icon_name(icon); | ||||||
|  |                                 safe_setenv("DUNST_APP_NAME",  appname); | ||||||
|  |                                 safe_setenv("DUNST_SUMMARY",   summary); | ||||||
|  |                                 safe_setenv("DUNST_BODY",      body); | ||||||
|  |                                 safe_setenv("DUNST_ICON_PATH", icon_path); | ||||||
|  |                                 safe_setenv("DUNST_URGENCY",   urgency); | ||||||
|  |                                 safe_setenv("DUNST_ID",        n_id_str); | ||||||
|  |                                 safe_setenv("DUNST_PROGRESS",  n_progress_str); | ||||||
|  |                                 safe_setenv("DUNST_CATEGORY",  n->category); | ||||||
|  |                                 safe_setenv("DUNST_STACK_TAG", n->stack_tag); | ||||||
|  |                                 safe_setenv("DUNST_URLS",      n->urls); | ||||||
|  |                                 safe_setenv("DUNST_TIMEOUT",   n_timeout_str); | ||||||
|  |                                 safe_setenv("DUNST_TIMESTAMP", n_timestamp_str); | ||||||
|  |                                 safe_setenv("DUNST_STACK_TAG", n->stack_tag); | ||||||
|  | 
 | ||||||
|                                 int ret = execlp(script, |                                 int ret = execlp(script, | ||||||
|                                                 script, |                                                 script, | ||||||
|                                                 appname, |                                                 appname, | ||||||
| @ -142,7 +162,7 @@ void notification_run_script(struct notification *n) | |||||||
|                                                 urgency, |                                                 urgency, | ||||||
|                                                 (char *)NULL); |                                                 (char *)NULL); | ||||||
|                                 if (ret != 0) { |                                 if (ret != 0) { | ||||||
|                                         LOG_W("Unable to run script: %s", strerror(errno)); |                                         LOG_W("Unable to run script %s: %s", n->scripts[i], strerror(errno)); | ||||||
|                                         exit(EXIT_FAILURE); |                                         exit(EXIT_FAILURE); | ||||||
|                                 } |                                 } | ||||||
|                         } |                         } | ||||||
|  | |||||||
| @ -55,9 +55,9 @@ struct notification { | |||||||
|         char *iconname;          /**< plain icon information (may be a path or just a name)
 |         char *iconname;          /**< plain icon information (may be a path or just a name)
 | ||||||
|                                       Use this to compare the icon name with rules.*/ |                                       Use this to compare the icon name with rules.*/ | ||||||
| 
 | 
 | ||||||
|         gint64 start;      /**< begin of current display */ |         gint64 start;      /**< begin of current display (in milliseconds) */ | ||||||
|         gint64 timestamp;  /**< arrival time */ |         gint64 timestamp;  /**< arrival time (in milliseconds) */ | ||||||
|         gint64 timeout;    /**< time to display */ |         gint64 timeout;    /**< time to display (in milliseconds) */ | ||||||
|         int locked;     /**< If non-zero the notification is locked **/ |         int locked;     /**< If non-zero the notification is locked **/ | ||||||
| 
 | 
 | ||||||
|         GHashTable *actions; |         GHashTable *actions; | ||||||
|  | |||||||
							
								
								
									
										12
									
								
								src/utils.c
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								src/utils.c
									
									
									
									
									
								
							| @ -247,4 +247,16 @@ const char *user_get_home(void) | |||||||
|         return home_directory; |         return home_directory; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | bool safe_setenv(const char* key, const char* value){ | ||||||
|  |         if (!key) | ||||||
|  |                 return false; | ||||||
|  | 
 | ||||||
|  |         if (!value) | ||||||
|  |                 setenv(key, "", 1); | ||||||
|  |         else | ||||||
|  |                 setenv(key, value, 1); | ||||||
|  | 
 | ||||||
|  |         return true; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| /* vim: set ft=c tabstop=8 shiftwidth=8 expandtab textwidth=0: */ | /* vim: set ft=c tabstop=8 shiftwidth=8 expandtab textwidth=0: */ | ||||||
|  | |||||||
							
								
								
									
										12
									
								
								src/utils.h
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								src/utils.h
									
									
									
									
									
								
							| @ -4,6 +4,7 @@ | |||||||
| 
 | 
 | ||||||
| #include <glib.h> | #include <glib.h> | ||||||
| #include <string.h> | #include <string.h> | ||||||
|  | #include <stdbool.h> | ||||||
| 
 | 
 | ||||||
| //! Test if a string is NULL or empty
 | //! Test if a string is NULL or empty
 | ||||||
| #define STR_EMPTY(s) (!s || (*s == '\0')) | #define STR_EMPTY(s) (!s || (*s == '\0')) | ||||||
| @ -137,5 +138,16 @@ gint64 time_monotonic_now(void); | |||||||
|  */ |  */ | ||||||
| const char *user_get_home(void); | const char *user_get_home(void); | ||||||
| 
 | 
 | ||||||
|  | /**
 | ||||||
|  |  * Try to set an environment variable safely. If an environment variable with | ||||||
|  |  * name `key` exists, it will be overwritten. | ||||||
|  |  * If `value` is null, `key` will be set to an empty string. | ||||||
|  |  * | ||||||
|  |  * @param key (nullable) The environment variable to change | ||||||
|  |  * @param value (nullable) The value to change it to. | ||||||
|  |  * @returns: A bool that is true when it succeeds | ||||||
|  |  */ | ||||||
|  | bool safe_setenv(const char* key, const char* value); | ||||||
|  | 
 | ||||||
| #endif | #endif | ||||||
| /* vim: set ft=c tabstop=8 shiftwidth=8 expandtab textwidth=0: */ | /* vim: set ft=c tabstop=8 shiftwidth=8 expandtab textwidth=0: */ | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 fwsmit
						fwsmit