@@ -49,7 +49,7 @@ class Core
49
49
50
50
@@jobs_opts = Rex ::Parser ::Arguments . new (
51
51
"-h" => [ false , "Help banner." ] ,
52
- "-k" => [ true , "Terminate the specified job name." ] ,
52
+ "-k" => [ true , "Terminate jobs by job ID and/or range." ] ,
53
53
"-K" => [ false , "Terminate all running jobs." ] ,
54
54
"-i" => [ true , "Lists detailed information about a running job." ] ,
55
55
"-l" => [ false , "List all running jobs." ] ,
@@ -795,13 +795,17 @@ def cmd_jobs(*args)
795
795
when "-l"
796
796
dump_list = true
797
797
798
- # Terminate the supplied job name
798
+ # Terminate the supplied job ID(s)
799
799
when "-k"
800
- if ( not framework . jobs . has_key? ( val ) )
801
- print_error ( "No such job" )
802
- else
803
- print_line ( "Stopping job: #{ val } ..." )
804
- framework . jobs . stop_job ( val )
800
+ job_list = build_jobs_array ( val )
801
+ print_status ( "Killing the following job(s): #{ job_list . join ( ', ' ) } " )
802
+ job_list . map ( &:to_s ) . each do |job |
803
+ if framework . jobs . has_key? ( job )
804
+ print_status ( "Killing job #{ job } " )
805
+ framework . jobs . stop_job ( job )
806
+ else
807
+ print_error ( "Invalid job identifier: #{ job } " )
808
+ end
805
809
end
806
810
when "-K"
807
811
print_line ( "Stopping all jobs..." )
@@ -1709,7 +1713,7 @@ def cmd_sessions(*args)
1709
1713
1710
1714
when 'kill'
1711
1715
session_list = build_sessions_array ( sid )
1712
- print_status ( "Killing the following session(s): #{ session_list } " )
1716
+ print_status ( "Killing the following session(s): #{ session_list . join ( ', ' ) } " )
1713
1717
session_list . each do |sess |
1714
1718
session = framework . sessions . get ( sess )
1715
1719
if session
@@ -1729,13 +1733,16 @@ def cmd_sessions(*args)
1729
1733
end
1730
1734
1731
1735
when 'detach'
1732
- if ( ( session = framework . sessions . get ( sid ) ) )
1733
- print_status ( "Detaching session #{ sid } " )
1734
- if ( session . interactive? )
1735
- session . detach ( )
1736
+ session_list = build_sessions_array ( sid )
1737
+ print_status ( "Detaching the following session(s): #{ session_list . join ( ', ' ) } " )
1738
+ session_list . each do |sess |
1739
+ session = framework . sessions . get ( sess )
1740
+ if session
1741
+ print_status ( "Detaching session #{ sess } " )
1742
+ session . detach
1743
+ else
1744
+ print_error ( "Invalid session identifier: #{ sess } " )
1736
1745
end
1737
- else
1738
- print_error ( "Invalid session identifier: #{ sid } " )
1739
1746
end
1740
1747
1741
1748
when 'interact'
@@ -3380,6 +3387,26 @@ def build_sessions_array(sid_list)
3380
3387
return session_list . uniq . sort
3381
3388
end
3382
3389
3390
+ # Generate an array of job IDs when presented with input such as '1' or '1,2,4-6,10' or '1,2,4..6,10'
3391
+ def build_jobs_array ( jid_list )
3392
+ job_list = Array . new
3393
+ temp_list = jid_list . split ( "," )
3394
+
3395
+ temp_list . each do |ele |
3396
+ if ele . include? '-'
3397
+ temp_array = ( ele . split ( "-" ) . inject { |s , e | s . to_i ..e . to_i } ) . to_a
3398
+ job_list . concat ( temp_array )
3399
+ elsif ele . include? '..'
3400
+ temp_array = ( ele . split ( ".." ) . inject { |s , e | s . to_i ..e . to_i } ) . to_a
3401
+ job_list . concat ( temp_array )
3402
+ else
3403
+ job_list . push ( ele . to_i )
3404
+ end
3405
+ end
3406
+
3407
+ return job_list . uniq . sort
3408
+ end
3409
+
3383
3410
end
3384
3411
3385
3412
0 commit comments