1- /* $OpenBSD: ssh-add.c,v 1.185 2026/02/11 17:01:34 dtucker Exp $ */
1+ /* $OpenBSD: ssh-add.c,v 1.186 2026/03/05 05:44:15 djm Exp $ */
22/*
33 * Author: Tatu Ylonen <[email protected] > 44 * Copyright (c) 1995 Tatu Ylonen <[email protected] >, Espoo, Finland @@ -237,6 +237,21 @@ delete_all(int agent_fd, int qflag)
237237 return ret ;
238238}
239239
240+ static int
241+ query_exts (int agent_fd )
242+ {
243+ int r ;
244+ char * * exts = NULL ;
245+ size_t i ;
246+
247+ if ((r = ssh_agent_query_extensions (agent_fd , & exts )) != 0 )
248+ fatal_r (r , "unable to query supported extensions" );
249+ for (i = 0 ; exts != NULL && exts [i ] != NULL ; i ++ )
250+ puts (exts [i ]);
251+ stringlist_free (exts );
252+ return 0 ;
253+ }
254+
240255static int
241256check_cert_lifetime (const struct sshkey * cert , int cert_lifetime )
242257{
@@ -803,7 +818,7 @@ main(int argc, char **argv)
803818 char * * dest_constraint_strings = NULL , * * hostkey_files = NULL ;
804819 int r , i , ch , deleting = 0 , ret = 0 , key_only = 0 , cert_only = 0 ;
805820 int do_download = 0 , xflag = 0 , lflag = 0 , Dflag = 0 ;
806- int qflag = 0 , Tflag = 0 , Nflag = 0 ;
821+ int Qflag = 0 , qflag = 0 , Tflag = 0 , Nflag = 0 ;
807822 SyslogFacility log_facility = SYSLOG_FACILITY_AUTH ;
808823 LogLevel log_level = SYSLOG_LEVEL_INFO ;
809824 struct sshkey * k , * * certs = NULL ;
@@ -835,7 +850,7 @@ main(int argc, char **argv)
835850
836851 skprovider = getenv ("SSH_SK_PROVIDER" );
837852
838- while ((ch = getopt (argc , argv , "vkKlLNCcdDTxXE:e:h:H:M:m:qs :S:t:" )) != -1 ) {
853+ while ((ch = getopt (argc , argv , "vkKlLNCcdDTxXE:e:h:H:M:m:Qqs :S:t:" )) != -1 ) {
839854 switch (ch ) {
840855 case 'v' :
841856 if (log_level == SYSLOG_LEVEL_INFO )
@@ -912,6 +927,9 @@ main(int argc, char **argv)
912927 case 'q' :
913928 qflag = 1 ;
914929 break ;
930+ case 'Q' :
931+ Qflag = 1 ;
932+ break ;
915933 case 'T' :
916934 Tflag = 1 ;
917935 break ;
@@ -923,7 +941,7 @@ main(int argc, char **argv)
923941 }
924942 log_init (__progname , log_level , log_facility , 1 );
925943
926- if ((xflag != 0 ) + (lflag != 0 ) + (Dflag != 0 ) > 1 )
944+ if ((xflag != 0 ) + (lflag != 0 ) + (Dflag != 0 ) + ( Qflag != 0 ) > 1 )
927945 fatal ("Invalid combination of actions" );
928946 else if (xflag ) {
929947 if (lock_agent (agent_fd , xflag == 'x' ? 1 : 0 ) == -1 )
@@ -937,6 +955,10 @@ main(int argc, char **argv)
937955 if (delete_all (agent_fd , qflag ) == -1 )
938956 ret = 1 ;
939957 goto done ;
958+ } else if (Qflag ) {
959+ if (query_exts (agent_fd ) == -1 )
960+ ret = 1 ;
961+ goto done ;
940962 }
941963
942964#ifdef ENABLE_SK_INTERNAL
0 commit comments