diff --git a/src/common/credential_utils.c b/src/common/credential_utils.c index d7ab4cebbe15a5aca136b85481607a5dcc0a2aec..1fa06607340a4b42c0816e2ee952bbbf75e03d11 100644 --- a/src/common/credential_utils.c +++ b/src/common/credential_utils.c @@ -29,6 +29,7 @@ static int is_credential_still_valid ( slurm_job_credential_t * credential , Lis static int init_credential_state ( credential_state_t * credential_state , slurm_job_credential_t * credential ) ; void free_credential_state ( void * credential_state ) ; static int insert_credential_state ( slurm_job_credential_t * credential , List list ) ; +static int insert_revoked_credential_state ( revoke_credential_msg_t * revoke_msg , List list ) ; int sign_credential ( slurm_ssl_key_ctx_t * sign_ctx , slurm_job_credential_t * credential ) { @@ -121,8 +122,8 @@ int revoke_credential ( revoke_credential_msg_t * revoke_msg , List list ) return SLURM_SUCCESS ; } } - slurm_seterrno ( ESLURMD_CREDENTIAL_TO_EXPIRE_DOESNOT_EXIST ) ; - return SLURM_FAILURE ; + insert_revoked_credential_state ( revoke_msg , list ) ; + return SLURM_SUCCESS ; } int is_credential_still_valid ( slurm_job_credential_t * credential , List list ) @@ -207,3 +208,18 @@ int insert_credential_state ( slurm_job_credential_t * credential , List list ) list_append ( list , credential_state ) ; return SLURM_SUCCESS ; } + +int insert_revoked_credential_state ( revoke_credential_msg_t * revoke_msg , List list ) +{ + time_t now = time ( NULL ) ; + credential_state_t * credential_state ; + + credential_state = xmalloc ( sizeof ( slurm_job_credential_t ) ) ; + credential_state -> job_id = revoke_msg -> job_id ; + credential_state -> expiration = revoke_msg -> expiration_time ; + credential_state -> revoked = true ; + credential_state -> revoke_time = now ; + list_append ( list , credential_state ) ; + return SLURM_SUCCESS ; +} + diff --git a/src/common/slurm_protocol_defs.h b/src/common/slurm_protocol_defs.h index fb3cb90bd8eb8345ddbb7aa6a45c6646af5cafea..207620b7edefef54ee83a918ba0f4674a73f794f 100644 --- a/src/common/slurm_protocol_defs.h +++ b/src/common/slurm_protocol_defs.h @@ -487,6 +487,7 @@ typedef struct return_code_msg { typedef struct revoke_credential_msg { uint32_t job_id ; + time_t expiration_time; char signature[SLURM_SSL_SIGNATURE_LENGTH] ; } revoke_credential_msg_t ; diff --git a/src/common/slurm_protocol_pack.c b/src/common/slurm_protocol_pack.c index ad72fc92d38a13cff1d295f44ed24dadb7eca7ba..8637d2d87548df66ba8ff91e688084ccb7fc21bf 100644 --- a/src/common/slurm_protocol_pack.c +++ b/src/common/slurm_protocol_pack.c @@ -731,6 +731,7 @@ void pack_revoke_credential_msg ( revoke_credential_msg_t* msg , void ** buffer assert ( msg != NULL ); pack32( msg->job_id, buffer, length ) ; + pack32( ( uint32_t ) msg->expiration_time, buffer, length ) ; packmem( msg->signature, SLURM_SSL_SIGNATURE_LENGTH , buffer, length ) ; } @@ -744,6 +745,7 @@ int unpack_revoke_credential_msg ( revoke_credential_msg_t** msg , void ** buffe return ENOMEM; unpack32( &(tmp_ptr->job_id), buffer, length ) ; + unpack32( &(tmp_ptr->expiration_time), buffer, length ) ; unpackmem( tmp_ptr->signature, & uint16_tmp , buffer, length ) ; *msg = tmp_ptr; diff --git a/src/slurmctld/job_mgr.c b/src/slurmctld/job_mgr.c index 3c2e6072487612aa1c6a7c066d6a84ac251de321..ddf43a09e66ee1c3efa0455a5fcc328bb0ecdd5a 100644 --- a/src/slurmctld/job_mgr.c +++ b/src/slurmctld/job_mgr.c @@ -710,6 +710,7 @@ load_job_state ( void ) #ifdef HAVE_LIBELAN3 if (buffer_size < (2 * sizeof (uint16_t))) break; + qsw_alloc_jobinfo(&step_ptr->qsw_job); qsw_unpack_jobinfo(step_ptr->qsw_job, buf_ptr, &buffer_size); #endif safe_unpack16 (&step_flag, &buf_ptr, &buffer_size); diff --git a/src/slurmctld/node_scheduler.c b/src/slurmctld/node_scheduler.c index a4460d072ea97f44dee0dc61553dc64b16cf3066..88f314d99d55553ad5d46d209c32c33b667800b4 100644 --- a/src/slurmctld/node_scheduler.c +++ b/src/slurmctld/node_scheduler.c @@ -199,6 +199,7 @@ deallocate_nodes (struct job_record * job_ptr) last_node_update = time (NULL); revoke_job_cred.job_id = job_ptr -> job_id; + revoke_job_cred.expiration_time = job_ptr -> details -> credential . expiration_time ; memset ( (void *)revoke_job_cred.signature, 0, sizeof (revoke_job_cred.signature)); for (i = 0; i < node_record_count; i++) { diff --git a/src/slurmd/slurmd.c b/src/slurmd/slurmd.c index 8f7297588cf6f70e235509abb287c6f6d1768622..04c3b87f4d69090eabc2e4f3d5c2d15036d64c00 100644 --- a/src/slurmd/slurmd.c +++ b/src/slurmd/slurmd.c @@ -511,9 +511,9 @@ void slurm_rpc_revoke_credential ( slurm_msg_t * msg ) /* return result */ if (error_code) { - error ("slurmd_req: error %d, time=%ld", + error ("slurmd_req: error %m errno %d, time=%ld", error_code, (long) (clock () - start_time)); - slurm_send_rc_msg ( msg , error_code ); + slurm_send_rc_msg ( msg , errno ); } else {